gpt4 book ai didi

c++ - 如何从 C++ 中的 vector 中删除节点

转载 作者:行者123 更新时间:2023-11-30 02:36:23 27 4
gpt4 key购买 nike

如何从 C++ 中的 vector 中删除节点此代码甚至无法编译

typedef vector<simple_node> container;
//======================================
// remove an item from the queue that matches what we arelady have
container parser::removeFromQueue(container local_container, simple_node *node_to_remove)
{
for (auto i = local_container.begin(); i != local_container.end(); i++)
{
if ((i->toy == node_to_remove->toy) &&
(i->type == node_to_remove->type))
{
local_container.erase(remove(local_container.begin(), local_container.end(), i), local_container.end());
break;
}
}
return local_container;

}

上线失败

local_container.erase(remove(local_container.begin(), local_container.end(), i), local_container.end());

编译器提示分配质量不佳。

最佳答案

我认为你这样做很困难。您可以使用 std::remove_if 而不是手写循环来遍历容器来自带有 lambda 表达式的标准库。

container parser::removeFromQueue(container local_container, simple_node *node_to_remove)
{
auto pred = [node_to_remove](const simple_node &node) {
return node.toy == node_to_remove->toy && node.type == node_to_remove->type;
};
local_container.erase(std::remove_if(local_container.begin(), local_container.end(), pred), local_container.end());
return local_container;
}

上述函数将移除所有满足条件的元素。如果您只想删除第一个 匹配元素,这是一个简单的更改。

container parser::removeFromQueue(container local_container, simple_node *node_to_remove)
{
auto pred = [node_to_remove](const simple_node &node) {
return node.toy == node_to_remove->toy && node.type == node_to_remove->type;
};
auto itr = std::find_if(local_container.begin(), local_container.end(), pred);
if (itr != local_container.end()) {
local_container.erase(itr);
}
return local_container;
}

关于c++ - 如何从 C++ 中的 vector 中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32814827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com