4

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

4

2 回答 2

8

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

于 2012-09-26T17:40:54.583 回答
3

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

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

由于没有这样s的 for c.begin(),所以不能在不违反前提条件的情况下递减。

于 2012-09-26T20:24:01.963 回答