--begin(container) - 这个定义是什么意思?

4

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


那么,--begin(iter) 是什么意思? - Galimov Albert
只需记住:http://en.wikipedia.org/wiki/Principle_of_least_astonishment - Martin York
2个回答

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

标准库几乎有一个这样的例子:std::forward_list 有一个 before-begin 迭代器,但是通过递减 begin() 是无法到达它的。 - Cubbi
啊,所以你说“几乎”是因为这个原因,: )。我不知道它是“无法访问的”。谢谢你提供的信息。 - Hindol

3
迭代器的要求非常清晰:在24.2.6 [bidirectional.iterators],表格110中:
--r (表达式) X& (返回类型) pre: 存在s使得r == ++s。
由于对于c.begin()不存在这样的s,因此不能将其减少而不违反前提条件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接