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