使用迭代器

时间:2017-04-21 16:39:54

标签: c++ list loops iterator

我正在尝试为一些具有两个迭代器的代码创建一个while循环,一个从列表的开头开始,然后递增,另一个在结束时开始并递减,希望它们一旦停止就停止到达列表的中间位置,整个列表已被覆盖。当我使用向量迭代器执行类似操作时,我只能执行while (limit > first),但这不起作用,并且在完成列表迭代器时会出现编译器错误。我正在研究一个书籍问题,除了两个给定的迭代器之外,还有一个任务要求是不在代码中分配任何新内存,并且无法确定如何正确地浏览列表元素。

2 个答案:

答案 0 :(得分:4)

反向迭代器取消引用前一个元素而不是它们内部引用的元素(" base")。 (有关视觉说明,请参阅this image。)

这意味着如果你有:

auto forward = a_list.begin();
auto backward = a_list.rbegin();

您交替增加forwardbackward,会有forward == backward.base()的时间。您必须在递增每个迭代器之后对此进行测试,不是,否则它们可能会在测试之前相互交叉。

答案 1 :(得分:1)

您可以使用std::list::size

#include <list>
using namespace std;

void handle(int v) { cout << v << endl; }
void main() {
    list<int> l = { 1,2,3,4,5,6,7,8,9 };
    auto f = l.cbegin();
    auto r = l.crbegin();
    const int stepsCount = l.size() / 2;
    for (int i = 0; i < stepsCount; ++i) {
        handle(*f); handle(*r);
        f++; r++;
    }
    if (l.size() % 2) handle(*r);
}
相关问题