从类中删除列表元素

Delete list element from class

本文关键字:列表元素 删除      更新时间:2023-10-16

我尝试删除列表元素,但总是得到错误消息。

首先我有这个类结构:

Class X
{ public:
  ID;
  name;
}

那么我就有了list container

现在,我想从容器中删除特定的元素。

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) ; }
}
}

但是,我得到错误:

" iterator doesn't have ID ".

我该如何修复它?

这是因为点运算符.比解引用运算符*"强"。从表中可以看出,点的优先级为2,而解引用星号*的优先级为3(越低越强)。这意味着如果没有括号,编译器会尝试获取迭代器的成员ID,然后解引用ID的值。这是不可能的,因为迭代器没有名为ID的成员。

你需要加上括号来强制你想要的优先级:

if ( (*itr).ID == b.ID )

或者,您可以使用->操作符对迭代器解引用:

if ( itr->ID == b.ID )

注意:c++标准库提供了一种不需要循环的方法:

a.erase(
    remove_if(
        a.begin()
    ,   a.end()
    ,   [](X x){ return x.ID == b.ID; }
    )
,   a.end()
);

我更喜欢使用itr->ID而不是*itr.ID。