2016-05-08 149 views
-4

如何在不修改當前迭代器的情況下獲取循環中的下一個/上一個迭代器?我不能使用operator++operator--,因爲這會干擾循環的實際迭代。C++迭代器遍歷

如果我正在遍歷數組索引i,我可以說A[i+1] = A[i]而不實際修改i。我如何做迭代器的等價物?

+1

'的std :: VECTOR'標記,是'* (it + 1)'有問題? – LogicStuff

回答

0

我可以說A[i+1] = A[i]而不真正修改i

語法隨機訪問迭代器相同的(類似的std::vector):

iterator + 1 // next 

iterator - 1 // previous 

對於非隨機訪問迭代器(或者,如果你想要的東西通用)使用std::nextstd::prev

std::next(iterator) // next 

std::prev(iterator) // previous 
3

如果C++ 11,使用std::next()

auto it = ...; 
auto next_it = std::next(it); // doesn't modify 'it' 

如果C++ 03,寫自己的std::next()基於關閉的std::advance()

template<class ForwardIt> 
ForwardIt next(ForwardIt it, 
       typename std::iterator_traits<ForwardIt>::difference_type n = 1) 
{ 
    std::advance(it, n); 
    return it; 
} 

注意,如果你的迭代器是隨機訪問迭代器,你可以爲數組索引做同樣的事情。那就是:

auto next_it = it + 1;  
+0

mine是一個隨機訪問(向量),所以假設我想用當前元素替換下一個位置,這將工作嗎?它+ 1 = *它; –

+0

@Bijeetchatterjee你的意思是'*(it + 1)= * it;'。 – emlai

+0

否我的意思是(it + 1)= * it; –