IT用語集 › プログラミング › C++ Ranges

C++ Ranges

プログラミング Svenska → 更新: 2026-10-23

C++20 による標準アルゴリズムの刷新。コレクションを2つのイテレータではなく1つのオブジェクトとして渡し、変換をパイプでつなげられる。

従来は std::sort(v.begin(), v.end()) と書く必要があり、二つのイテレータが別々のコンテナのものでも、コンパイラは助けてくれなかった。Ranges なら std::ranges::sort(v) で済む。さらに大きな新機軸がビューで、これは遅延評価され、所有権を持たない、組み合わせ可能なアダプタだ。v | views::filter(even) | views::transform(square) | views::take(5) は、中間の vector を一切作らずにコレクションを一度だけたどる。基盤になったのは Eric Niebler の range-v3 ライブラリである。

不満の種は、コンパイル時間、コンセプトがあっても読みにくいままのエラーメッセージ、そして C++20 が ranges::to なしで出荷されたため、実際のコンテナに戻すのが無駄に面倒なことだった。これは C++23 で追加された。

← 用語集に戻る