std::vector
があり、iterator
をベクターの最後の要素にしたい。このイテレーターを後で使用するために保管します。
注:std::vector::back
ではなく、それへのイテレータ参照が必要です。後でstd::vector::begin
からこのオブジェクトのインデックスを計算できるようにするためです。
以下は、イテレータを最後の要素に到達させるための私のロジックです。
std::vector<int> container;
std::vector<int>::iterator it = container.end()--;
std::vector::end
はO(1)時間の複雑さを持っているので、これを行うより良い方法はありますか?
私はあなたがどちらかを意味すると思います:
_std::vector<int>::iterator it = --container.end();
std::vector<int>::iterator it = container.end() - 1;
std::vector<int>::iterator it = std::prev(container.end());
_
意図せずにend()
を返すだけです。しかし、これらすべての問題は、ベクターが空の場合に発生します。そうでない場合、それらはすべて一定の時間で正しく動作します。ベクトルが空の場合でも、最後の要素はありません。
イテレータを保存するときも注意してください。イテレータは無効になる可能性があります。
_vector<T>::iterator
_が_T*
_(これは有効です)だけである場合、上記の最初のフォームの形式が正しくないことに注意してください。 2番目の2つは関係なく機能するので、望ましいです。
post incrementはafterが割り当てられるまで値を変更しないため、この方法では誤ったイテレータが提供されます。
これは常にあります:
auto it = std::prev(container.end());
イテレータが有効な範囲に存在するように、コンテナが空でないことを最初に確認することを忘れないでください。