2012-10-18 89 views
0

我有一個函數在參數中使用一個常量迭代器,我想對該函數進行遞歸調用,但是遞增了我的迭代器(不修改迭代器本身)。遞增一個常數foward迭代器

我發現的唯一解決方案是創建一個迭代器的副本,並預先遞增該副本,最終將其作爲函數調用的參數傳遞。

func(const FowardIterator & i, const container & c) { 
    // lot of very smart code 

    FowardIterator next = i; 

    ++next; 
    func(next, c); 
} 

有沒有更簡單的方法來做到這一點,一個不涉及創建一個臨時迭代器?

+2

你應該值反正通過迭代器。 –

+0

前向迭代器是否有operator ++(int)?如果它確實那麼func(i + 1,c)呢? – Grzegorz

+0

STL Foward迭代器不支持i + n,只有隨機訪問迭代器可以。 – tomahh

回答

1

迭代器應該是非常快的複製,所以真的沒有理由接受const&;按值傳遞應該沒問題,並且可以避免在函數體中顯式複製迭代器。

這就是說,你還可以使用std::next複製一個迭代器,並事先把一切都步:

func(std::next(i), c);