std::list<CPoint>::iterator iter= vertices.end();
CPoint point = *(iter+1);
(iter-1)
そのような場合、変数にまたはの値を代入しようとしました(iter+1)
。うまくいかないのはなぜですか?一方iter++
またはiter--
動作します。
簡単に言えば、これらの操作はiterator
定義の一部ではありません。std::advance()
そのために関数を使用できます。
明らかに、operator+(int)
をそのままオーバーライドしてそれを行うことができますがoperator++()
、おそらくそうではありません。なぜなら、この操作は一定の複雑さであることが保証されておらず、構文のようなもの(iter + n)
はそうでないことを示唆している可能性があるからです。
からadvance
:
複雑さ:線形。ただし、
InputIt
さらに の要件を満たしている場合RandomAccessIterator
、複雑さは一定です。