範囲ベースの for ループ内のベクトル要素の管理
C 11 では、範囲ベースの for ループは、範囲ベースの for ループを反復処理する便利な方法を提供します。コンテナの要素。ただし、ベクトルからの要素の削除などの特定の操作は、これらのループ内で問題になります。
C 11 範囲ベースの for ループ中にベクトルから要素を削除できますか?
残念ながら、そうではありません。範囲ベースの for ループは、コンテナー内の各要素を 1 回だけ反復するように設計されています。これらは、要素の削除など、コンテナ自体の変更には適していません。
要素の削除の代替:
ループ内のベクトルから要素を削除するには、次を使用する必要があります。従来の for ループまたはその変形。これらにより、コンテナの変更と非線形トラバースが可能になります。
例:
auto i = std::begin(inv); while (i != std::end(inv)) { // Do some stuff if (blah) i = inv.erase(i); else ++i; }
std::begin 関数と std::end 関数を使用すると、ループはイテレータを使用してベクトルを反復します。要素が削除対象としてマークされると、erase 関数が呼び出され、削除された要素を指す反復子が無効になります。その後、ループはイテレータを進めて続行します。
結論として、範囲ベースの for ループは読み取り専用の反復では使いやすいですが、ベクトルから要素を削除するような操作の場合は、従来の for ループを採用する必要があります。コンテナの変更に対する制御を維持します。
以上がC 11 範囲ベースの For ループ中にベクトルから要素を削除できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。