gpt4 book ai didi

C++:从对象指针 vector 中删除元素而不删除它指向的对象的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-27 22:49:36 28 4
gpt4 key购买 nike

从对象指针 vector 中删除元素而不删除它指向的对象的正确方法是什么?

我正在尝试有选择地从我的 vector 中删除元素

std::vector<Node*>openNodes;

不破坏任何指向的 Node 对象。 (这些节点正在别处使用。)

我试过像这样使用 的 remove_if 函数

std::remove_if(openNodes.begin(),openNodes.end(),CheckClosedNode);

使用我自己的自定义比较函数

bool CheckClosedNode(Node *tocheck)
{
if(tocheck->isOpen)
return false; //Don't remove. Node is still open.
else
{
//std::cout << "node " << tocheck->id << " is being removed from open list..." << std::endl;
return true; // Remove. Node is closed.
}
}

然而,当我 std::cout openNodes 的内容时,没有任何内容被删除。我读到我应该将 std::erase() 与 remove_if() 结合使用,但是 erase() 会删除节点。我想把所有需要删除的元素移到vector的前面,然后做一个pop_front(),结果发现pop_front也删除了。

有没有一种标准的方法可以在不删除对象的情况下从 vector 中删除元素?

最佳答案

如果节点是指针,它实际上不会删除节点。当您使用 new 为对象分配内存时,删除指针是您的工作。现在,如果你像 vector<Node> 那样声明它这将是一个问题,因为删除必须调用节点上的解构函数。然而,指针实际上就像一个 int 类型(因为它只是一个内存地址)。当您将它从 vector 中移除时,它指向的内存不会发生任何变化。

关于C++:从对象指针 vector 中删除元素而不删除它指向的对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38763988/

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