【发布时间】:2026-02-14 20:50:02
【问题描述】:
目前,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相应地需要正向和双向迭代器。 -
我相信他们没有想到要这样设计它......就像许多其他东西一样。
-
std::next不会更改传递给它的迭代器,它会返回另一个指向集合中下一个元素的迭代器。这不是输入迭代器的选项。 -
请注意,C++ 并不禁止您编写自己的
std::advance或在其之上的版本。 -
将
advance视为高级便利函数(如next)使用的底层低级实现抽象。他们两个都有一席之地。
标签: c++ iterator c++-standard-library