[英]Why is there no operator +/- for a bidirectional iterator?
我自己的理由是,没有随机访问,也没有办法知道界限。 但是,为什么我们要使用std::advance
呢? [编辑]考虑一下,为什么没有std::deadvance
(因为缺少更好的词)?
你是对的; operator+/-
的要求是它是O(1)
操作,双向迭代器无法满足。 std::advance
没有这样的速度要求(但是会在可用时使用它,例如,用于随机访问迭代器)。
注意,boost为迭代器提供了boost::next
和boost::prior
实现; 我不确定他们在标准化方面的地位如何,但是如果它在推动中的确是牢固的。
std::advance
的合理性在于,即使它不是O(1),也应该明确地表明您确实打算使用它。
您不需要std::deadvance
因为您可以使用负距离的std::advance
(对于双向迭代器)。
我们之所以拥有std::advance
是因为它提供了一种使用迭代器支持的最有效方式来推进迭代器的方法 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.