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

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

Mary-Kate Olsen
リリース: 2024-12-08 18:11:15
オリジナル
681 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート