目前,std::advance
是这样设计的:为什么不std :: advance返回结果迭代器?
template< class InputIt, class Distance >
void advance(InputIt& it, Distance n);
不过,我经常发现自己想要的东西,如:
template< class InputIt, class Distance >
InputIt advance(InputIt it, Distance n);
那么,什么是当前的设计背后的原理是什么?这是出于某种性能考虑?请注意,std::next
和std::prev
确实会返回结果迭代器。
我相信这个设计需要支持输入迭代器。 'std :: next'和'std :: prev'需要相应的前向和双向迭代器。 –
我相信他们没有想到像这样设计它......就像很多其他的东西一样。 – Nawaz
IDK。但是,在其他地方,我们做了一些努力来避免迭代器的多余副本,例如post和pre increment。所以显然有人认为这是一个性能问题,正如你所建议的那样。 –