重複の可能性:
std :: mapからアイテムをフィルタリングする方法は?
std :: list::eraseが機能しない
std :: listでの削除、消去に関して、いくつかのばかげた質問があります。
私は次のように定義されたクラスを持っています:
class CBase
{
public:
CBase(int i): m(i)
{};
int m;
};
次に、次のように設定します。
list<CBase> ml;
CBase b1(1);
CBase b2(2);
CBase b3(3);
CBase b4(4);
ml.push_back(b1);
ml.push_back(b2);
ml.push_back(b3);
ml.push_back(b4);
m==2のアイテムは;で消去できます。
for (list<CBase>::iterator it=ml.begin(); it!=ml.end(); ++it)
{
if (it->m == 2)
{
ml.erase(it--);
}
}
// show what we have now:
for (list<CBase>::iterator it=ml.begin(); it!=ml.end(); it++)
{
cout << it->m;
}
しかし、私がそうする場合:
for (list<CBase>::iterator it=ml.begin(); it!=ml.end(); it++)
{
if (it->m == 2)
{
ml.erase(it);
it--;
}
}
例外があります。どうしてこれなの?
そして、b3を削除したい場合は、
ml.remove(b3);
コンパイルされません。私がオンラインで見つけたすべての例は、もしあれば、list<int>
問題なく呼び出すことができます。どうすればそれを機能させることができますか?mylist.remove(3)
mylist is list<int>