![](/img/trans.png)
[英]What's the difference between using std::cout and using ::std::cout?
[英]What's the difference between std::advance and std::next?
除了提前還有更多的負數嗎?
也許最大的實際區別是std::next()
僅在C ++ 11中可用。
默認情況下, std::next()
將前進一個,而std::advance()
需要一個距離。
然后有返回值:
std::advance()
:(無)(傳入的迭代器被修改) std::next()
:第n個繼任者。 std::next()
就像std::advance
一樣使用負數,在這種情況下要求迭代器必須是雙向的。 當intent專門向后移動時, std::prev()
會更具可讀性。
的std ::提前
函數advance()遞增作為參數傳遞的迭代器的位置。 因此,該函數允許迭代器向前(或向后)多個元素:
#include <iterator>
void advance (InputIterator& pos, Dist n)
- 允許輸入迭代器pos步驟n元素向前( 或向后 )。
- 對於雙向和隨機訪問迭代器,n可能為負向后退。
- Dist是模板類型。 通常,它必須是整數類型,因為調用<,++, - 和與0的比較等操作。
- 請注意,advance()不會檢查它是否越過序列的end()(它無法檢查,因為迭代器通常不知道它們運行的容器)。 因此,調用此函數可能會導致未定義的行為,因為未定義為序列末尾調用operator ++。
std :: next (和C ++ 11中的std::prev
new)
#include <iterator>
ForwardIterator next (ForwardIterator pos)
ForwardIterator next (ForwardIterator pos, Dist n)
- 如果向前移動1或n位置,則產生前向迭代器pos所具有的位置。
- 對於雙向和隨機訪問迭代器,n可能是負數以產生先前的定位。
- Dist是類型std :: iterator_traits :: difference_type。
- 為內部臨時對象調用advance(pos,n)。
- 請注意,next()不會檢查它是否越過序列的end()。 因此,由調用者決定結果是否有效。
The C++ Standard Library Second Edition
引用
它們幾乎相同,除了std::next
返回一個副本並且std::advance
修改它的參數。 請注意,標准要求std::next
的行為類似於std::advance
:
24.4.4迭代器操作[iterator.operations]
template <class InputIterator, class Distance> void advance(InputIterator& i [remark: reference], Distance n);
2.要求:對於雙向和隨機訪問迭代器,n應為負數
3.效果:增量(或負n的減量)迭代器引用i由n。
[...]template <class ForwardIterator> ForwardIterator next(ForwardIterator x, [remark: copy] typename std::iterator_traits<ForwardIterator>::difference_type n = 1);
6.效果:相當於
advance(x, n); return x;
advance(x, n); return x;
請注意,如果迭代器是輸入迭代器,則它們實際上都支持負值。 另請注意, std::next
要求迭代器滿足ForwardIterator的條件,而std::advance
只需要一個Input Iterator(如果不使用負距離)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.