--begin(container) - 是否定义了行为?

时间:2012-09-26 17:37:56

标签: c++ stl iterator

我正在为自定义双向迭代器实现递减运算符。递减迭代器指向Range的第一个元素是定义的行为吗?递减后是否有一些特殊值,如Range.end()?

2 个答案:

答案 0 :(得分:8)

在所有标准库容器的迭代器中,这是未定义的行为。但是如果你正在创建自己的迭代器类,则不必如此。

答案 1 :(得分:3)

迭代器要求相当明确:在24.2.6 [bidirectional.iterators]中,表110:

  

--r(表达式)X&(返回类型)pre:存在sr == ++s

由于s没有c.begin(),因此在不违反前提条件的情况下不能递减。