我正在为自定义双向迭代器实现递减运算符。递减迭代器指向Range的第一个元素是定义的行为吗?递减后是否有一些特殊值,如Range.end()?
答案 0 :(得分:8)
在所有标准库容器的迭代器中,这是未定义的行为。但是如果你正在创建自己的迭代器类,则不必如此。
答案 1 :(得分:3)
迭代器要求相当明确:在24.2.6 [bidirectional.iterators]中,表110:
--r
(表达式)X&
(返回类型)pre:存在s
,r == ++s
。
由于s
没有c.begin()
,因此在不违反前提条件的情况下不能递减。