C++ラムダ関数を学んでいますが、このおそらく簡単な問題がいくつかの問題を引き起こしています。
いくつかの整数を含むベクトルがあります。偶数をすべて削除しようとしています。
現在、偶数を削除していますが、ベクターの内容を印刷すると、ベクターの最後に繰り返しデータが残ります。
int main()
{
std::vector<int> v1 = {0,1,1,2,3,5,8,13,21,55,89};
for (const auto &i : v1) std::cout<< i << " ";
std::cout<<std::endl;
v1.erase(std::remove_if(v1.begin(), v1.end(), [](int i)
{ return (i % 2) == 0; }));
for (const auto &i : v1) std::cout<< i << " ";
}
出力:
0 1 1 2 3 5 8 13 21 55 89
1 1 3 5 13 21 55 89 55 89
2行目の出力を次のようにしたい:
1 1 3 5 13 21 55 89
編集
みんな、ありがとう。私は間違ったバージョンの消去を使用していました (今では非常にばかげているように感じます)。正しいコードは次のとおりです。
int main()
{
std::vector<int> v1 = {0,1,1,2,3,5,8,13,21,55,89};
for (const auto &i : v1) std::cout<< i << " ";
std::cout<<std::endl;
v1.erase(std::remove_if(v1.begin(), v1.end(), [](int i)
{ return (i % 2) == 0; }), v1.end());
for (const auto &i : v1) std::cout<< i << " ";
}