オブジェクトポインタを指すオブジェクトを削除せずに、オブジェクトポインタのベクトルから要素を削除する適切な方法は何ですか?C++:オブジェクトポインタを指すオブジェクトを削除せずにオブジェクトポインタのベクトルから要素を削除する適切な方法は何ですか?
私が選択的に指摘されているノードオブジェクトのいずれかを破壊することなく、私のベクトル
std::vector<Node*>openNodes;
から要素を削除しようとしています。 (これらのノードは他の場所で使用されている。)
私ははstdとき、しかし、私自身のカスタムコンパレータ機能
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::remove_if(openNodes.begin(),openNodes.end(),CheckClosedNode);
よう<アルゴリズム>のremove_if機能を使用してみました:: cout openNodesの内容は、何も削除されていません。私は、remove_if()と組み合わせてstd :: erase()を使うべきであることを読んだが、erase()はノードを削除する。私は削除する必要があるすべての要素をベクトルの前面に移動し、pop_front()を実行することを考えましたが、pop_frontも削除します。
オブジェクトを削除せずにベクトルから要素を削除する標準的な方法はありますか?
std :: vector :: eraseのドキュメントを紛らわしかったです。削除された要素(あなたの場合はポインタ)が指摘していない要素を破棄します。 – Resurrection