を:
#include <algorithm>
#include <functional>
// this is a function object to delete a pointer matching our criteria.
struct entity_deleter
{
void operator()(Entity*& e) // important to take pointer by reference!
{
if (e->GetXPos() > 1.5f)
{
delete e;
e = NULL;
}
}
// now, apply entity_deleter to each element, remove the elements that were deleted,
// and erase them from the vector
for_each(Entities.begin(), Entities.end(), entity_deleter());
vector<Entity*>::iterator new_end = remove(Entities.begin(), Entities.end(), static_cast<Entity*>(NULL));
Entities.erase(new_end, Entities.end());
今、私はあなたが考えているか知っています。他の回答のほうが短いと思っています。 しかし、(1)このメソッドは通常、より速いコードにコンパイルします - それを比較しようとします、(2)これは適切なSTL方法です、(3)愚かなエラーの可能性が少なく、 STLコードを読むことができれば読んでください。 STLのプログラミングを学ぶ価値はありますが、Scott Meyerの素晴らしい本「Effective STL」にこの種のSTLヒントがあります。
もう1つ重要なことは、操作が終了するまで要素を消去しないことで、要素をシャッフルする必要がないことです。 GManはこれを避けるためにリストを使用することを提案していましたが、この方法を使用すると、操作全体がO(n)になります。対照的に、上記のNeilのコードは、検索がO(n)であり、削除がO(n)であるため、O(n^2)です。
ご使用の言語/環境に質問にタグを付けて、メインページから何を使用しているかを確認してください(さらに多くのビューが表示されます)。 – Zifre
しかし、あなたはコードの残りの部分でベクトルを使って何をしているのか分かりません!一般に、ベクトルは最初の選択コンテナでなければならず、他のものは等しい。 –
一般に、手書きループにはSTLアルゴリズムを使用することをお勧めします。 – rlbond