0
std::list<CPoint>::iterator iter= vertices.end();
CPoint point = *(iter+1); 

(iter-1)そのような場合、変数にまたはの値を代入しようとしました(iter+1)。うまくいかないのはなぜですか?一方iter++またはiter--動作します。

4

1 に答える 1

2

簡単に言えば、これらの操作はiterator定義の一部ではありません。std::advance()そのために関数を使用できます。

明らかに、operator+(int)をそのままオーバーライドしてそれを行うことができますがoperator++()、おそらくそうではありません。なぜなら、この操作は一定の複雑さであることが保証されておらず、構文のようなもの(iter + n)はそうでないことを示唆している可能性があるからです。

からadvance:

複雑さ:線形。ただし、InputItさらに の要件を満たしている場合RandomAccessIterator、複雑さは一定です。

于 2013-01-12T10:12:26.763 に答える