推进列表迭代器

Advancing a list iterator

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

有没有办法将第二个 for 循环的索引启动到 (i+1(?我尝试提前清理,但如果我将其插入 for 循环中,每次迭代它都会前进 1。我只是希望它从(i + 1(开始并继续。

for (list< list<string> >::const_iterator i = l.begin(); i != l.end(); i++)
    if (i -> front() == s)
        for(list<string>::const_iterator j = i ->begin(); j != i -> end(); j++)
            cout << *j << "  ";
  • j = i -> begin() + 1抛出了一个错误。
  • j = advance(i, 1) -> begin()也失败了。

您可以使用不修改其参数的std::next

std::list<string>::const_iterator j = std::next(i->begin());

或推导迭代器类型

auto j = std::next(i->begin());

当您想要将给定迭代器推进某个位置时,将使用std::advanceadvance(it, n)实现了it += n,而next(it, n)实现了it + n。 Advance 不返回任何内容,它在其输入上完成工作。

带有积分的operator+不适用于std::list,因为它具有双向迭代器,二进制加号仅受 RandomAccessIterator 支持。

<iterator>提供的这些实用程序使用一些模板魔术来找出推进迭代器的最佳方法。简而言之,如果你给next一些没有operator+的东西,它会复制并反复调用++ N次。