【发布时间】:2016-12-10 09:05:47
【问题描述】:
从对象指针向量中删除元素而不删除它指向的对象的正确方法是什么?
我正在尝试有选择地从我的向量中删除元素
std::vector<Node*>openNodes;
不破坏任何指向的节点对象。 (这些节点正在其他地方使用。)
我尝试像这样使用 的 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() 会删除节点。我想将所有需要删除的元素移到向量的前面并执行 pop_front(),但结果 pop_front 也删除了。
是否有一种标准方法可以在不删除对象的情况下从向量中删除元素?
【问题讨论】:
-
您误解了有关 std::vector::erase 的文档。它会破坏已删除的元素(在您的情况下是指针)而不是它们指向的元素。