我对 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>
。我怎样才能让它工作?