如何擦除包含指向结构的指针的列表的对象?
How to erase an object of a list containing pointers to a struct?
我有一个名为 Node 的结构,它有 3 个成员,其中一个充当对象的 ID:
struct Node {
string mem1;
string mem2;
int id;
}
以及包含指向 Node 对象的指针的列表:
list<Node*> g_node;
当试图从该列表中删除特定对象时出现问题(由 id 本地化)。我有此代码但不起作用:
list<Node>::iterator it = g_node.begin();
while (it != g_node.end()){
if (it->id == iden)
{
g_node->erase(it);
}
}
} else if (iden != 0) {
"iden"为待删除对象的id,由用户输入。
怎么了?
为什么不使用 std::list::remove_if
?
g_node.remove_if([iden](const Node *n){return n->id == iden;});
请注意,这不会 delete
Node
对象(您的原始代码也不会)。对于保存指针的容器,您可能需要考虑智能指针。
remove_if 是个好主意,但如果你想拥有一个可以轻松重用和随意自定义的功能,你可以这样做:
bool remove_from_list(int id, list<Node*> &g_node)
{
auto it = g_node.begin();
while (it != g_node.end())
{
if ((*it)->id == id)
{
// free memory... if you allocated those pointers
delete (*it);
g_node.erase(it);
return true;
}
else
it++;
}
return false;
}
list<Node*> g_node;
g_node.push_back(new Node { "a", "b", 5 });
g_node.push_back(new Node { "ee", "77", 6 });
remove_from_list(5, g_node);
我有一个名为 Node 的结构,它有 3 个成员,其中一个充当对象的 ID:
struct Node {
string mem1;
string mem2;
int id;
}
以及包含指向 Node 对象的指针的列表:
list<Node*> g_node;
当试图从该列表中删除特定对象时出现问题(由 id 本地化)。我有此代码但不起作用:
list<Node>::iterator it = g_node.begin();
while (it != g_node.end()){
if (it->id == iden)
{
g_node->erase(it);
}
}
} else if (iden != 0) {
"iden"为待删除对象的id,由用户输入。
怎么了?
为什么不使用 std::list::remove_if
?
g_node.remove_if([iden](const Node *n){return n->id == iden;});
请注意,这不会 delete
Node
对象(您的原始代码也不会)。对于保存指针的容器,您可能需要考虑智能指针。
remove_if 是个好主意,但如果你想拥有一个可以轻松重用和随意自定义的功能,你可以这样做:
bool remove_from_list(int id, list<Node*> &g_node)
{
auto it = g_node.begin();
while (it != g_node.end())
{
if ((*it)->id == id)
{
// free memory... if you allocated those pointers
delete (*it);
g_node.erase(it);
return true;
}
else
it++;
}
return false;
}
list<Node*> g_node;
g_node.push_back(new Node { "a", "b", 5 });
g_node.push_back(new Node { "ee", "77", 6 });
remove_from_list(5, g_node);