【发布时间】:2014-05-08 14:31:09
【问题描述】:
我尝试删除列表元素,但总是收到错误消息。
首先我有这个类结构:
Class X
{ public:
ID;
name;
}
然后我有列表容器。
现在,我想从容器中删除特定元素。
void delete ( list<X> a , X b )
{
list<X>::iterator itr;
for ( itr =a.begin() ; itr != a.end() ; itr++ )
{
if ( *itr.ID == b.ID )
{ a.erase(itr) ; }
}
}
但是,我得到错误:
“迭代器没有 ID”。
我该如何解决?
【问题讨论】:
-
一旦你解决了这个问题,你必须为函数找到一个新的名字,因为
delete是一个关键字。erase和remove是常见的选择。您还需要通过引用传递a,并记住迭代器失效规则。或者你可以让生活更轻松并使用a.remove(b); -
@MikeSeymour 你的意思是通过引用传递
a -
@bolov:确实如此。已更正。
-
@MikeSeymour 那应该是
a.remove_if( [&]( X const& x ) { return x.ID == b.ID; } );,不是吗? -
@JamesKanze:你说得对,我应该避免在没有先编译的情况下提出快速建议。