C++迭代器遍历



如何在不修改当前迭代器的情况下获得循环中的下一个/上一个迭代器?我不能使用operator++operator--,因为这会干扰循环的实际迭代。

如果我在数组索引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::advance():的基础上编写自己的std::next()

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;    

我可以说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

最新更新