ホームページ >バックエンド開発 >C++ >C 11 範囲ベースの For ループ中にベクトルから要素を削除できますか?

C 11 範囲ベースの For ループ中にベクトルから要素を削除できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-02 13:07:12151ブラウズ

Can You Remove Elements from a Vector During a C  11 Range-based For Loop?

範囲ベースの 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。