从两端开始浏览列表,然后使用迭代器在中间停止



我正在尝试为某些具有两个迭代器的代码进行一个循环,一个是从列表的开头开始的,并且是从列表开始的,另一个是在结尾处开始的,减少,希望他们在达到列表的中间并涵盖整个列表后停止。使用矢量迭代器做类似的操作时,我只能进行while (limit > first),但是在使用列表迭代器完成时,这无效,并给出编译器错误。我正在处理一个书籍问题,该问题的任务要求是除了两个给定的迭代器外,没有在代码中分配任何新内存,并且很难弄清楚如何正确地浏览列表的元素。

<</p>

反向迭代器向前的元素,而不是内部指的元素(" base"(。(有关视觉说明,请参见此图像。(

这意味着如果您有:

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

,您会增加forwardbackward,曾经有一段时间forward == backward.base()。您必须在增加迭代器后进行测试,不是两者否则他们可以在测试之前互相交叉。

您可以使用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);
}

最新更新