ISO C++11 24.3:
template <class InputIterator, class Distance>
void advance(InputIterator& i, Distance n);
// ...
template <class ForwardIterator>
ForwardIterator next
(
ForwardIterator x,
typename std::iterator_traits<ForwardIterator>::difference_type n = 1
);
なぜsstd::next
を受け入れないInputIterator
のですか?
私が考えている合法的なユースケースの1つは次のとおりです。
first = find(next(first, x), last, 11); // ...
適切なDRを見つけました:
next
/prev
元のイテレータの値を変更せずにインクリメントされたイテレータを返します。ただし、これでも無効になる場合がありInputIterator
ます。ForwardIterator
「マルチパス」プロパティを保証するには、Aが必要です。
しかし、マルチパス/無効化がそれにどのように関連しているかはわかりません。同じマルチパス/無効化の推論を使用して、s を禁止することもできstd::find
ますInputIterator
。
template<class InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last, const T& value);
s の完全に合法的なユースケースと比較std::next
して特別なことは何もありませんstd::find
std::vector::insert(pos, first, last)
InputIterator
さらに、sstd::next(it, n)
だけでなく、一般的なコードでも使用できますInputIterator
。