推进列表迭代器

Kev*_*kka 1 c++ loops list

有没有办法将第二个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 << "  ";
Run Code Online (Sandbox Code Playgroud)
  • j = i -> begin() + 1 扔了一个错误.
  • j = advance(i, 1) -> begin() 也失败了.

Rya*_*ing 10

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

list<string>::const_iterator j = std::next(i->begin());
Run Code Online (Sandbox Code Playgroud)

或推导出迭代器类型

auto j = std::next(i->begin());
Run Code Online (Sandbox Code Playgroud)

std::advance当你想通过某个位置推进给定的迭代器时使用. advance(it, n)实现的it += n同时next(it, n)实现it + n.Advance不会返回任何内容,它会根据其输入进行操作.

operator+std::list由于它具有BidirectionalIterator,因此使用积分将不起作用,二进制加号仅受RandomAccessIterator支持.

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