2015-11-13 101 views
1

有什么办法可以将第二个循环的索引开始到(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()也失败了。
+0

list :: const_iterator j = i - > begin()** + 1 **。但是你最好确定'我'至少有一个元素。 – Jon

+0

嘿乔恩,我的清单绝对不是空的,我尝试了你的方法,但它一直在抛出一个错误。 –

+0

啊,是的,这在一般情况下不起作用。 'std :: next'是正确的,尽管这需要C++ 11。 ++(i-> begin())'为C++ 03。 – Jon

回答

10

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

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

或当你想通过一些提前给定的迭代推断迭代器类型

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

std::advance使用位置。 advance(it, n)达到it += n,而next(it, n)达到it + n。 Advance不会返回任何内容,它会根据输入进行操作。

operator+具有整体不会为std::list工作,因为它有一个BidirectionalIterator,二进制加仅由RandomAccessIterator支持。

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