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
);
为什么std::next不接受InputIterators?
我正在考虑的法律用例之一是:
first = find(next(first, x), last, 11); // ...
我找到了合适的博士:
next/prev返回一个递增的迭代器,而不改变原始迭代器的值。但是,即使这样也可能使InputIterator. AForwardIterator是保证“多通道”属性所必需的。
但我不明白 multipass/invalidation 与此有何关系。使用相同的多通道/无效推理,我们甚至可以禁止std::finds InputIterator:
template<class InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last, const T& value);
与sstd::next相比std::find或std::vector::insert(pos, first, last)具有完全合法的用例没有什么特别之处InputIterator
此外std::next(it, n),可以在泛型代码中使用,它不仅在InputIterators 上运行。