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::findstd::vector::insert(pos, first, last)InputIterator
さらに、sstd::next(it, n)だけでなく、一般的なコードでも使用できますInputIterator。