递增迭代器以指向另一个迭代器的下一个元素

Incrementing an iterator to point to the next element of another iterator

本文关键字:迭代器 下一个 另一个 元素      更新时间:2023-10-16

我有两个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
    }
}