最近、私が維持しているコードで次のことを見つけました。
for (reverse_iterator rit = base_container::rbegin(); rit != base_container::rend() && 0 < N; N--)
{
another_container->push_back(*rit);
base_container::erase((++rit).base());
}
reverse_iterator を使用して、ループ内のコンテナー (この場合は std::list) から最後の要素を削除しようとします。要点は、正しく動作するように見えますが、そうではありません (無効なイテレータが原因でメモリの破損が発生する場合があります)。なぜでしょうか? そうしないための制限や規則はありますか?
ありがとう。
PSソリューションの改善を防ぐために、私はすでにそれを書き直して機能させました。問題は、上記のコードが正しく機能しない理由です。