推进列表迭代器

时间:2015-11-13 20:00:31

标签: c++ list loops

有没有办法将第二个for循环的索引启动到(i + 1)?我尝试使用advance进行修改,但是如果我将它插入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()也失败了。

1 个答案:

答案 0 :(得分:10)

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

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达到operator+。 Advance不会返回任何内容,它会根据其输入进行操作。

带有积分的

std::list不适用于next,因为它有BidirectionalIterator,二进制加号仅由RandomAccessIterator支持。

<iterator>提供的这些实用程序使用一些模板魔法来找出推进迭代器的最佳方法。简而言之,如果您提供operator+没有++的内容,它会复制并重复拨打CREATE EXTENSION IF NOT EXISTS hstore; N次。