私はこの簡単なテストプログラムを書いています。しかし、私はここで何が起こるのか理解できません。出力に奇妙なことがあるので:私はリストを印刷する場合リストエレメントが消去されると、イテレータの最後には何が起こりますか?
std::list<std::pair<double,double>> l;
l.push_back({0.3,0.9});
l.push_back({-0.3,0.5});
l.push_back({0.3,0.7});
l.push_back({1.2,1.83});
for(auto it=l.begin(); it!=l.end(); ++it){
double lx= it->first + 0.01;
double ly= it->second + 0.01;
it->first = lx;
it->second = ly;
if(lx < 0.0 || lx > 1.0 || ly < 0.0 || ly > 1.0){
it = l.erase(it);
}
は、私が手:
0.32, 0.92
0.31, 0.71
なぜイテレータは(2回0.1)最初の要素に戻っていますか?
ifの '== 0'は余計ですが、実際は' it!= end() 'がそれを処理するため、ifは役に立たないのです。なぜ私は最初の要素が2回あると言っているのか分かりません。あなたは1位と3位の要素を削除して、要素0と2を削除するように見えます。 – Borgleader
答えをありがとう。はい、Element 0と2を出力しますが、最初の要素に0.1を2回追加します。私は理由を理解できません: (0.31、0.91)と(0.31,0.71) – Susliks
これを行うための典型的なパターンは、l.erase(std: :remove_if(...)、l.end()) '。 – ArchbishopOfBanterbury