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

时间:2012-01-11 18:05:08

标签: c++ iterator

我自己的推理是没有随机访问,也没有办法知道边界。但那我们为什么要std::advance? [编辑]然后想一想,为什么没有std::deadvance(因为没有更好的词)?

3 个答案:

答案 0 :(得分:4)

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

请注意,boost对迭代器有boost::nextboost::prior个实现;我不确定他们在标准化方面的地位如何,但如果它在提升中则是稳固的。

答案 1 :(得分:3)

std::advance的理由是,显然确实打算使用它,即使它不是O(1)。

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

答案 2 :(得分:2)

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