2014-06-23 49 views
1

是否有類似於advance的函數,但是會返回一個迭代器而不是void返回類型?我有一個函數調用,比如:函數與返回迭代器的advance類似嗎?

//... 
[&value](InIter part_begin, std::size_t part_count) 
     { 
      difference_type ret = 
       std::count(part_begin, std::advance(part_begin,count), value); 
      return ret; 
     }, 

,但進步是一個void返回類型的功能,所以目前我做

//... 
[&value](InIter part_begin, std::size_t part_count) 
     { 
      InIter end = part_begin; 
      std::advance(end,part_count); 
      difference_type ret = std::count(part_begin, end, value); 
      return ret; 
     }, 

一定要注意我不能只是做很重要part_begin + count,這對我正在使用的一些迭代器不起作用,這迫使我目前使用std::advance。有沒有更乾淨的方式來做到這一點?

回答

5

您可以使用std::next來獲取由給定數量的元素改進的迭代器。與std::advance相反,std::next不會更改傳遞的迭代器本身。

[&value](InIter part_begin, std::size_t count) { 
     difference_type ret = 
      std::count(part_begin, std::next(part_begin,count), value); 
     return ret; 
    }, 
+0

完美!感謝您的快速回復 –

6

是的,它叫做std::next。它不修改它的論點。