如何在不修改當前迭代器的情況下獲取循環中的下一個/上一個迭代器?我不能使用operator++
或operator--
,因爲這會干擾循環的實際迭代。C++迭代器遍歷
如果我正在遍歷數組索引i
,我可以說A[i+1] = A[i]
而不實際修改i
。我如何做迭代器的等價物?
如何在不修改當前迭代器的情況下獲取循環中的下一個/上一個迭代器?我不能使用operator++
或operator--
,因爲這會干擾循環的實際迭代。C++迭代器遍歷
如果我正在遍歷數組索引i
,我可以說A[i+1] = A[i]
而不實際修改i
。我如何做迭代器的等價物?
如果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;
mine是一個隨機訪問(向量),所以假設我想用當前元素替換下一個位置,這將工作嗎?它+ 1 = *它; –
@Bijeetchatterjee你的意思是'*(it + 1)= * it;'。 – emlai
否我的意思是(it + 1)= * it; –
'的std :: VECTOR'標記,是'* (it + 1)'有問題? – LogicStuff