私は自分のベクトルを通過し、もはや必要としなかった要素を削除したいという問題に遭遇しました。それが失敗した理由は明らかですが、私は素朴なアプローチを試みたときにそれを見ませんでした。基本的には、要素を消去するとイテレータが無効になり、ループを続行できません。私は、次のされたもの:ベクトルを反復処理して特定の要素を削除する正しい方法は何ですか
#define GOOD 1
#define BAD 0
struct Element
{
Element(int isGood) : good(isGood){}
bool good;
};
int main()
{
std::vector<Element> arr;
arr.push_back(Element(BAD));
arr.push_back(Element(GOOD));
arr.push_back(Element(BAD));
arr.push_back(Element(GOOD));
//__CLEAN ARRAY__//
for (auto it = arr.begin(); it != arr.end(); ++it)
{
if ((*it).good == false) arr.erase(it);
}
}
だから、これは動作しないことは明らかだ、私はこれを行うための正しい/最良の方法は何であるか疑問に思いました。私の次のステップは、見つからない場合は新しいイテレータでループを再起動することですが、これもまた無駄に思えます。理想的には、ループは新しいイテレータで中断したところで続行されますか?
ありがとうございました。
'std :: remove_if'について読んでください。 –