制約付きアルゴリズム (C++20以上)
提供: cppreference.com
C++20 ではほとんどのアルゴリズムの制約付きバージョンが名前空間 std::ranges
で提供されます。 これらのアルゴリズムでは、範囲は iterator と sentinel の組としてまたは単一の range 引数として指定することができ、射影とメンバポインタの callable がサポートされます。 さらに、ほとんどのアルゴリズムの戻り値の型はアルゴリズムの実行中に計算される役に立つかもしれないすべての情報を返すように変更されています。
目次 |
[編集]アルゴリズムのコンセプトとユーティリティ
ヘッダ <iterator> は共通アルゴリズム操作を制約付きにすることを容易にするために設計されたコンセプトおよび関連ユーティリティのセットを提供します。
ヘッダ <iterator> で定義 | |
名前空間 std で定義 | |
間接 callable コンセプト | |
呼び出し可能型が indirectly_readable 型を逆参照した結果を用いて呼ぶことができることを指定します (コンセプト) | |
呼び出し可能型が indirectly_readable 型を逆参照した結果を用いて呼ばれたときに predicate を満たすことを指定します (コンセプト) | |
callable 型が2つの indirectly_readable 型を逆参照した結果を用いて呼ばれたときに predicate を満たすことを指定します (コンセプト) | |
callable 型が2つの indirectly_readable を逆参照した結果を用いて呼ばれたときに strict_weak_order を満たすことを指定します (コンセプト) | |
共通アルゴリズム要件 | |
indirectly_readable 型から indirectly_writable 型に値をムーブできることを指定します (コンセプト) | |
indirectly_readable 型から indirectly_writable 型に値をムーブできることとそのムーブが中間オブジェクト経由で行うことができることを指定します (コンセプト) | |
indirectly_readable 型から indirectly_writable 型に値をコピーできることを指定します (コンセプト) | |
indirectly_readable 型から indirectly_writable 型に値をコピーできることとそのコピーが中間オブジェクト経由で行うことができることを指定します (コンセプト) | |
2つの indirectly_readable 型の参照先の値がスワップ可能であることを指定します (コンセプト) | |
2つの indirectly_readable 型の参照先の値が比較できることを指定します (コンセプト) | |
その場で要素を並べ替えるアルゴリズムの共通の要件を指定します (コンセプト) | |
要素をコピーすることによってソート済みシーケンスを出力シーケンスにマージするアルゴリズムの要件を指定します (コンセプト) | |
シーケンスを順序付きシーケンスに並び替えるアルゴリズムの共通の要件を指定します (コンセプト) | |
ユーティリティ | |
indirectly_readable 型の何らかの集合を逆参照した結果に対して callable オブジェクトを呼び出した結果を計算します (エイリアステンプレート) | |
射影を受け取るアルゴリズムに対する制約を指定するためのヘルパーテンプレート (クラステンプレート) |
[編集]制約付きアルゴリズム
ヘッダ <algorithm> で定義 | |
名前空間 std::ranges で定義 | |
非変更シーケンス操作 | |
指定範囲内の要素のすべて、1個以上、または0個に対して述語が true を返すかどうか調べます (ニーブロイド) | |
指定範囲の要素に関数を適用します (ニーブロイド) | |
特定の基準を満たす要素の数を返します (ニーブロイド) | |
2つの範囲が異なる最初の位置を探します (ニーブロイド) | |
2つの集合の要素が同じかどうか判定します (ニーブロイド) | |
ある範囲が別の範囲より辞書順で小さい場合に true を返します (ニーブロイド) | |
特定の基準を満たす最初の要素を探します (ニーブロイド) | |
特定の範囲内の要素の最後のシーケンスを探します (ニーブロイド) | |
要素の集合のいずれかを検索します (ニーブロイド) | |
最初の等しい (または指定の述語を満たす) 隣接する2つの項目を探します (ニーブロイド) | |
指定範囲の要素に対して検索を行います (ニーブロイド) | |
指定個数の連続する指定要素を指定範囲から検索します (ニーブロイド) | |
変更シーケンス操作 | |
指定範囲の要素を新しい位置にコピーします (ニーブロイド) | |
指定個数の要素を新しい位置にコピーします (ニーブロイド) | |
指定範囲の要素を逆順にコピーします (ニーブロイド) | |
指定範囲の要素を新しい位置にムーブします (ニーブロイド) | |
指定範囲の要素を新しい位置に逆順でムーブします (ニーブロイド) | |
特定の値を指定範囲の要素に代入します (ニーブロイド) | |
値を指定個数の要素に代入します (ニーブロイド) | |
指定範囲の要素に関数を適用します (ニーブロイド) | |
関数の結果を指定範囲に保存します (ニーブロイド) | |
関数の N 回の適用の結果を保存します (ニーブロイド) | |
特定の基準を満たす要素を削除します (ニーブロイド) | |
特定の基準を満たす要素を省きながら指定範囲の要素をコピーします (ニーブロイド) | |
特定の基準を満たすすべての値を別の値に置き換えます (ニーブロイド) | |
特定の基準を満たす要素を別の値で置換しながら範囲をコピーします (ニーブロイド) | |
2つの範囲の要素を入れ替えます (ニーブロイド) | |
指定範囲の要素の順序を反転させます (ニーブロイド) | |
指定範囲の逆順のコピーを作成します (ニーブロイド) | |
指定範囲の要素の順序を回転させます (ニーブロイド) | |
指定範囲の要素をコピーして回転させます (ニーブロイド) | |
措定範囲の要素をランダムに並べ替えます (ニーブロイド) | |
指定範囲の連続する重複要素を削除します (ニーブロイド) | |
連続する重複を含まない要素の範囲のコピーを作成します (ニーブロイド) | |
分割操作 | |
指定範囲が指定の述語で分割されているかどうか判定します (ニーブロイド) | |
指定範囲の要素を2つのグループに分割します (ニーブロイド) | |
要素を2つのグループに分割しながら指定範囲をコピーします (ニーブロイド) | |
相対順序を維持しながら要素を2つのグループに分割します (ニーブロイド) | |
分割済み範囲の分割点を探します (ニーブロイド) | |
ソート操作 | |
指定範囲が昇順にソートされているかどうか調べます (ニーブロイド) | |
最も大きなソート済み部分範囲を探します (ニーブロイド) | |
指定範囲を昇順にソートします (ニーブロイド) | |
指定範囲の最初の N 個の要素をソートします (ニーブロイド) | |
指定範囲の要素をコピーして部分的にソートします (ニーブロイド) | |
等しい要素間の順序を維持しながら指定範囲の要素をソートします (ニーブロイド) | |
指定要素で分割されることを保証しながら指定範囲を部分的にソートします (ニーブロイド) | |
二分探索操作 (ソート済み範囲用) | |
指定された値より小さくない最初の要素を指すイテレータを返します (ニーブロイド) | |
特定の値より大きい最初の要素を指すイテレータを返します (ニーブロイド) | |
特定の範囲に要素が存在するかどうか判定します (ニーブロイド) | |
特定のキーにマッチする要素の範囲を返します (ニーブロイド) | |
集合操作 (ソート済み範囲用) | |
2つのソート済み範囲をマージします (ニーブロイド) | |
2つの順序付き範囲をその場でマージします (ニーブロイド) | |
ある集合が別の集合の部分集合であれば true を返します (ニーブロイド) | |
2つの集合の差を計算します (ニーブロイド) | |
2つの集合の交差を計算します (ニーブロイド) | |
2つの集合の対称差を計算します (ニーブロイド) | |
2つの集合の和を計算します (ニーブロイド) | |
ヒープ操作 | |
指定された範囲が最大ヒープかどうか調べます (ニーブロイド) | |
最大ヒープである最も大きな部分範囲を探します (ニーブロイド) | |
指定範囲の要素から最大ヒープを作成します (ニーブロイド) | |
最大ヒープに要素を追加します (ニーブロイド) | |
最大ヒープから最も大きな要素を削除します (ニーブロイド) | |
最大ヒープを昇順にソートされた要素の範囲に変換します (ニーブロイド) | |
最小/最大演算 | |
指定された値の大きい方を返します (ニーブロイド) | |
指定範囲の最も大きな要素を返します (ニーブロイド) | |
指定された値の小さい方を返します (ニーブロイド) | |
指定範囲の最も小さな要素を返します (ニーブロイド) | |
2つの要素の小さい方と大きい方を返します (ニーブロイド) | |
指定範囲の最も小さな要素と最も大きな要素を返します (ニーブロイド) | |
順列操作 | |
シーケンスが別のシーケンスの順列かどうか判定します (ニーブロイド) | |
指定範囲の要素より辞書的に大きな次の順列を生成します (ニーブロイド) | |
指定範囲の要素より辞書的に小さな次の順列を生成します (ニーブロイド) |
[編集]制約付き未初期化メモリアルゴリズム
ヘッダ <memory> で定義 | |
名前空間 std::ranges で定義 | |
(C++20) | メモリの未初期化領域に指定範囲のオブジェクトをコピーします (ニーブロイド) |
(C++20) | メモリの未初期化領域に指定個数のオブジェクトをコピーします (ニーブロイド) |
(C++20) | 指定された範囲で定義されるメモリの未初期化領域にオブジェクトをコピーします (ニーブロイド) |
(C++20) | 指定された開始位置と個数で定義されるメモリの未初期化領域にオブジェクトをコピーします (ニーブロイド) |
(C++20) | メモリの未初期化領域に指定範囲のオブジェクトをムーブします (ニーブロイド) |
(C++20) | メモリの未初期化領域に指定個数のオブジェクトをムーブします (ニーブロイド) |
指定された範囲で定義されるメモリの未初期化領域にデフォルト初期化でオブジェクトを構築します (ニーブロイド) | |
指定された開始位置と個数で定義されるメモリの未初期化領域にデフォルト初期化でオブジェクトを構築します (ニーブロイド) | |
指定された範囲で定義されるメモリの未初期化領域に値初期化でオブジェクトを構築します (ニーブロイド) | |
指定された開始位置と個数で定義されるメモリの未初期化領域に値初期化でオブジェクトを構築します (ニーブロイド) | |
(C++20) | 指定アドレスのオブジェクトを破棄します (ニーブロイド) |
(C++20) | 指定範囲のオブジェクトを破棄します (ニーブロイド) |
(C++20) | 指定個数のオブジェクトを破棄します (ニーブロイド) |