递增迭代器以指向另一个迭代器的下一个元素
Incrementing an iterator to point to the next element of another iterator
我有两个unordered_maps
,我希望使用两个循环来迭代它们的内容。 传统上,使用普通的for循环来迭代向量vec
,我会像下面这样做:
for(int i=0; i<vec.size(); i++)
for(int j=i+1; j<vec.size(); j++)
带有unordered_maps
的代码如下:
unordered_map<int, int> m;
unordered_map<int, int>::iterator it1=m.begin();
unordered_map<int, int>::iterator it2=m.begin();
while(it1!=m.end()) {
it2=it1+1; //this is incorrect.
while(it2!=m.end()) {
//Do something
}
}
我应该如何正确初始化it2
,以便它指向当前指向的元素旁边的元素,it1
?
谢谢。 d(^_^)b
无序映射迭代器是前向迭代器,它们不支持operator+
。相反,请使用 std::next 函数:
it2 = std::next(it1);
或者,使用 std::advance 函数:
it2 = it1;
std::advance(it2, 1);
或简单的增量运算符:
it2 = it1;
++it2;
另一种选择是:
while (it1 != std::end(m)) {
it2 = it1;
while(++it2 != std::end(m)) {
//Do something
}
}
相关文章:
- 我可以将迭代器递增一个整数吗?
- 转到基于范围的 for 循环中的下一个迭代器
- C 使用默认限制的迭代器创建一个空的std :: String
- 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个
- 递增迭代器以指向另一个迭代器的下一个元素
- 我正在尝试使用矢量迭代器创建一个 for 循环
- 将迭代器作为一个参数传递
- 给定一个 std::set::iterator,获取一个指向下一个元素的迭代器
- std::迭代器是否可以检查该迭代器上是否存在下一个元素?(此设计受到家庭作业的限制)
- 如何寻址循环中的下一个迭代器并在同一地址插入元素
- 在列表迭代器中设置下一个对象
- 使用迭代器在矢量中插入下一个值以映射
- 存储当前和下一个迭代器
- 为可转换为指针的迭代器专门化一个类
- 是否有一个标准容器允许在不使迭代器无效的情况下插入元素
- 从迭代器返回一个std::list元素的引用
- c++迭代器在一个泛型函数中列出
- 跳过随机迭代器的一个条目
- 多线程无锁应用程序中具有多个迭代器的一个向量
- re C++范围迭代器:只有一个类不好吗