2012-09-26 24 views
4

我正在爲自定義雙向迭代器實現遞減運算符。遞減迭代器指向Range的第一個元素是否定義了行爲?遞減後它有一些特殊的價值,如Range.end()?- 開始(容器) - 定義行爲?

+0

Em ..所以什麼意思 - 開始(iter)? – PSIAlt

+0

只記得:http://en.wikipedia.org/wiki/Principle_of_least_astonishment –

回答

3

迭代器的要求是相當清楚的:在24.2.6 [bidirectional.iterators],表110:

--r(表達式)X&(返回類型)預:存在s使得r == ++s

因爲沒有這樣的sc.begin(),它不能在不違反前提遞減。

8

在所有標準庫容器的迭代器中,這是未定義的行爲。但是如果你正在做自己的迭代器類,它不一定是。

+0

標準庫幾乎有一個這樣的例子:'std :: forward_list'有一個before-begin迭代器,但是它不能通過遞減begin來達到( ) – Cubbi

+0

啊,這就是爲什麼你說_almost_,:)。我不知道它是_unreachable_。謝謝(你的)信息。 – Hindol