繁体   English   中英

为什么双向迭代器没有运算符+/-?

[英]Why is there no operator +/- for a bidirectional iterator?

我自己的理由是,没有随机访问,也没有办法知道界限。 但是,为什么我们要使用std::advance呢? [编辑]考虑一下,为什么没有std::deadvance (因为缺少更好的词)?

你是对的; operator+/-的要求是它是O(1)操作,双向迭代器无法满足。 std::advance没有这样的速度要求(但是会在可用时使用它,例如,用于随机访问迭代器)。

注意,boost为迭代器提供了boost::nextboost::prior实现; 我不确定他们在标准化方面的地位如何,但是如果它在推动中的确是牢固的。

std::advance的合理性在于,即使它不是O(1),也应该明确地表明您确实打算使用它。

您不需要std::deadvance因为您可以使用负距离的std::advance (对于双向迭代器)。

我们之所以拥有std::advance是因为它提供了一种使用迭代器支持的最有效方式来推进迭代器的方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM