C++迭代器遍历
C++ iterator traversing
如何在不修改当前迭代器的情况下获得循环中的下一个/上一个迭代器?我不能使用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::next
和std::prev
:
std::next(iterator) // next
和
std::prev(iterator) // previous
相关文章:
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 使用迭代器遍历向量并修改内容
- std::unordered_set迭代器遍历的复杂性
- boost::iterator_adaptor 的遍历类别是否由适配迭代器的类别决定
- 使用输入迭代器再次遍历容器
- 如何使用迭代器遍历表单 pair<int,pair<int,int>> 的映射
- 如果使用迭代器,如何解决遍历列表的问题
- 遍历std ::映射,效果少于迭代器之间的比较
- 从预序遍历迭代(不是递归)构造二叉搜索树
- 二进制搜索树中按顺序遍历的复杂性(使用迭代器)
- 映射迭代器遍历技术
- 在c++中遍历目录和迭代器
- C++迭代器遍历
- 列出不遍历所有元素的迭代器
- 通过不同的线程使用迭代器遍历 STL 映射
- C ++擦除std::vector.end(),同时循环遍历所有迭代器
- 使用相同的迭代器循环遍历两个 std::vector
- 无法使用迭代器遍历字符串:但是我的带有索引的版本确实有效
- 提升单遍迭代器和前向遍历迭代器有什么区别?
- 使用迭代器遍历boost::ublas矩阵