0
從對象指針向量中移除元素而不刪除它指向的對象的正確方法是什麼?C++:從對象指針向量中移除元素而不刪除它指向的對象的正確方法是什麼?
我想選擇性地從我的矢量
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也會被刪除。
有沒有一種標準的方法來刪除矢量中的元素而不刪除對象?
你誤解了關於std :: vector :: erase的文檔。它銷燬了刪除的元素(在你的情況下指針),而不是它們指向的內容。 – Resurrection