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