从类中删除列表元素
Delete list element from class
我尝试删除列表元素,但总是得到错误消息。
首先我有这个类结构:
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。
相关文章:
- C++如何通过用户输入删除列表元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 无法在C 中删除列表元素
- 从标准列表中删除元素
- 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个
- 从事件的迭代列表中删除元素
- 使用迭代器指针 (C++) 从对象指针列表中删除元素
- 使用迭代列表中删除向量中的元素
- 当删除列表元素时,在迭代器结束时会发生什么
- 我应该使用std ::删除以从列表中删除元素
- C 在双链接列表中删除元素函数
- 从链接列表中删除元素,采访暴露了图书漏洞
- 从C++中的列表中删除元素
- 正在从std::unique_pointer的std::列表中删除元素
- 指向删除后的列表元素的指针
- 从链接列表中删除第一个元素
- 如何从类型列表中删除元素
- 从unordered_set中删除列表元素
- 尝试从列表中删除元素时出现分段错误
- 如何在C++中只从列表中删除一次特定元素