ホームページ >バックエンド開発 >C++ >C 11 の範囲ベースの for ループを使用してコンテナーを逆反復するにはどうすればよいですか?

C 11 の範囲ベースの for ループを使用してコンテナーを逆反復するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-14 13:34:12352ブラウズ

How Can I Reverse Iterate Through a Container Using C  11's Range-Based for-Loops?

C を使用した範囲ベースの for ループの逆反復 11

C では、範囲ベースの for ループが便利な方法を提供します。コンテナの要素を反復処理します。ただし、イテレータの方向を逆にできる組み込みのコンテナ アダプタがないため、コンテナを逆の順序で反復することが困難になります。

コンセプト: コンテナ アダプタ

ソリューションを検討する前に、コンテナー アダプターの概念を理解することが重要です。これらは、コンテナをラップし、その要素の変更されたビューを提供するオブジェクトです。アダプターは、基になるコンテナーによって返された要素をフィルター、変換、または操作できます。

解決策: Boost の逆アダプター

イテレーターの方向を反転し、逆反復を有効にするには範囲ベースの for ループでは、Boost C ライブラリの boost::adaptors::reverse アダプターを利用できます。このアダプタはコンテナをラップし、その要素の逆シーケンスを返します。

次の例を考えてみましょう。

#include <list>
#include <iostream>
#include <boost/range/adaptor/reversed.hpp>

int main() {
    std::list<int> x { 2, 3, 5, 7, 11, 13, 17, 19 };

    // Iterate in reverse order
    for (auto i : boost::adaptors::reverse(x))
        std::cout << i << '\n';

    // Iterate in forward order
    for (auto i : x)
        std::cout << i << '\n';
}

この例では、逆アダプターは、リスト x を逆順に反復するために使用されます。出力は次のようになります:

19
17
13
11
7
5
3
2

注: boost::adaptors::reverse アダプターは、Boost C ライブラリーの一部です。Boost C ライブラリーは、以下を実行できるオープンソース ライブラリーのコレクションです。ダウンロードして既存の C プロジェクトに統合できます。

以上がC 11 の範囲ベースの for ループを使用してコンテナーを逆反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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