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