ホームページ >バックエンド開発 >C++ >Boost.Range を使用して C で範囲ベースの For ループを元に戻すにはどうすればよいですか?

Boost.Range を使用して C で範囲ベースの For ループを元に戻すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-08 18:11:15713ブラウズ

How Can I Reverse a Range-Based For-Loop in C   Using Boost.Range?

Boost.Range を使用した C 11 の範囲ベースの For ループの反転

C では、範囲ベースの for ループはコンテナを反復処理するための強力なツール。ただし、デフォルトでは、コンテナーの先頭から最後まで反復されます。この方向を逆にする方法はありますか?

範囲ベースの For ループを使用した逆反復子

コンテナーを逆に反復する 1 つの方法は、 rbegin() および rend() メンバー関数。ただし、これには明示的なイテレータの使用が必要であり、複雑なシナリオでは扱いにくくなる可能性があります。

for (auto i = c.rbegin(); i != c.rend(); ++i) { ... }

Boost.Range のリバース アダプタ

幸いなことに、Boost.Range はboost::adaptors::reverse アダプターを使用したエレガントなソリューション。このアダプターはコンテナーをラップし、そのイテレーターの方向を反転します。これにより、範囲ベースの for ループとのシームレスな統合が可能になります。

for (auto& i : boost::adaptors::reverse(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};
    for (auto i : boost::adaptors::reverse(x)) {
        std::cout << i << '\n';
    }
    for (auto i : x) {
        std::cout << i << '\n';
    }
    return 0;
}

出力:

19
17
13
11
7
5
3
2
2
3
5
7
11
13
17
19

以上がBoost.Range を使用して C で範囲ベースの For ループを元に戻すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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