C++列出迭代器算术

C++ list iterator arithmetic?

本文关键字:迭代器 C++      更新时间:2023-10-16

我正在尝试使用迭代器创建一组循环,并且在某些迭代器算术方面遇到了问题(我认为这是可能的,但不起作用)。

下面是一些代码:

  for (list<Term>::iterator itr = final.begin(); itr != final.end(); itr++) {
        for(list<Term>::iterator j = itr + 1; j != final.end(); j++) {
            cout << itr->term << " " << j->term;
            if(itr->term == j->term) {
                //Do stuff
            }
        }
    }

我想做的是让 j 从队列中的下一个位置开始,从 itr 开始。这样做的原因是我不想对照自己检查第一项。错误本身来自代码中我指定itr + 1的部分。现在我确定使用指针您可以像这样进行算术,为什么它不适用于列表迭代器(本质上是一回事?

我从IDE得到的错误如下:main.cpp:237:48: error: no match for ‘operator+’ in ‘itr + 1’。再次,我认为您可以在迭代器上进行这种算术,所以我不确定该怎么做才能完成这项工作,是否有我可以尝试的替代实现?

list迭代器不是随机访问的,因此您无法使用它们进行+。它们是双向迭代器,因此您可以执行的唯一移动操作是 --++ .您可以制作副本并在其上使用++,也可以制作副本并std::advance(it, 1)

对于 C++11 还有 std::next 它为您提供it + 1,而无需像其他人那样明确制作命名副本。

list具有双向迭代器,不支持operator +。您可以在 C++11 中使用 std::advancestd::next

for (list<Term>::iterator j = next(itr); j != final.end(); ++j)

list<Term>::iterator j = itr;
advance(j, 1); // or ++j
for (; j != final.end(); ++j)