有没有办法将第二个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次.