コードがこのように動作する理由を理解するのに苦労しています。まず第一に、関連する回答資料を読みましたが、それでも説明が少し進んでいることがわかりました。誰かがこれを簡単な方法で説明できるかどうか疑問に思っています。
わかりましたので、リストから要素を消去しています。
リストには、奇数と偶数の両方の int 要素が含まれています。この部分はわかります。リストから奇数を削除するために最初に書いたコードは次のとおりです
for(list<int>::iterator i = lNo.begin(); i != lNo.end(); i++)
{
if(*i%2 == 0 )
{
lNo.erase(i);
}
else
{
cout << " " << *i;
}
}
このコードでは、プログラムは単にコンパイルされず、プログラムをシャットダウンする必要があるというメッセージを読みました。
このコードを書くと、消去関数が機能します。
for(list<int>::iterator i = lNo.begin(); i != lNo.end(); i++)
{
if(*i%2 == 0 )
{
i = lNo.erase(i);
}
else
{
cout << " " << *i;
}
}
lNo.erase(i)だけではなく、i = lNo.erase(i)をコーディングするとプログラムが機能する理由を理解する必要がありますか?
シンプルで簡潔な回答をいただければ幸いです。コンテナーごとに異なる制約があることはわかっているので、元のコードで違反したのはどの制約ですか?