閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

std::vector::erase の戻り値

C++ライブラリクイックリファレンス

C++ライブラリクイックリファレンス

ISO/IEC に準拠している C++ 標準ライブラリのリファレンス。 STL とかを使うときに迷った時はこの本を参照するようにしているのですが、クイックリファレンスというだけあってさすがになんでも載っているわけではないようです。

vector の erase で要素を削除した後、この関数は別のイテレータを返しますが、このときに返ってくるイテレータが削除した要素より前のものなのか、後のものなのかあるいは未定義のものなのかが気になったので見てみたのですが、戻り値に付いては触れられておらず残念な思いをしました。

仕方が無いので Web で見られる最終草稿 (なら、見ても問題ないのですよね...?) を参照する羽目に。うーん、これがあれば規格書なんていらないや、と思っていたけれど、やっぱり買わなきゃ駄目かなあ。

ちなみに求めていた答えは ISO/IEC 14882:1998(E) -- C++ -- Containers library の 23.1.1 に書いてありました。

erase(iterator position) の戻り値は削除した要素 (position) の次の要素を返してくれるそうです。最初 prior を誤読して position の一個前にあった要素を返すのかと思ってしまいました…… orz 。最後の要素を削除すると end が戻ってくるので注意が必要です。

ここまで書いてから気付いたけれど、for(...) it = arr.erase(it); みたいなコードが存在するということは上記のような仕様に決まってるじゃないか! orz orz orz