2015-11-13 104 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次。