アソクコンテナとはどういう意味ですか?
これは、などのある種の連想コンテナを意味しstd::set
ます。イタリック体で印刷されていることに注意してください。つまり、実際のコードではなく、実際のコンテナタイプのプレースホルダーです。
'badvalue'はある種のキーワードですか?
いいえ、これは、値をコンテナから削除する必要があるかどうかを判断するためにプログラムによって定義された関数であることを意味します。前のページで紹介されており、「次の述語がtrueを返すすべてのオブジェクトを削除しましょう」と書かれています。
与えられたコードの問題は何ですか
これは、コードサンプルの直後の本で説明されています。erase(i)
イテレータを無効にします(つまり、イテレータでは何もできなくなります)。そのため、++i
直後にイテレータを実行すると、未定義の動作が発生します。代わりに、同じページの後半のコードを使用する必要があります。
for (AssocContainer<int>::iterator i = c.begin(); i != c.end(); /* nothing */) {
if (badValue(*i)) c.erase(i++);
else ++i;
}
これは、古い値を消去して無効i
にする前に増分します。