Namespaces
Variants

Constrained algorithms (since C++20)

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types

C++20は名前空間 std::ranges 内のほとんどのアルゴリズムに対して 制約付き 版を提供します。これらのアルゴリズムでは、範囲は イテレータ - センチネル ペア、または単一の range 引数として指定でき、射影とメンバへのポインタ呼び出し可能オブジェクトがサポートされます。さらに、ほとんどのアルゴリズムの 戻り値型 は、アルゴリズムの実行中に計算されたすべての潜在的に有用な情報を返すように変更されています。

目次

アルゴリズム関数オブジェクト

algorithm function object (AFO)、通称 niebloid は、 customization point object (CPO)の一種であり、1つ以上のオーバーロードされた関数テンプレートとして規定されます。これらの関数テンプレートの名前は、対応するアルゴリズム関数オブジェクトを指します。

アルゴリズム関数オブジェクト o に対して、 S を対応する関数テンプレートの集合とする。このとき、任意の引数列 args... に対して、 o ( args... ) 式等価 である s ( args... ) に、ここで s の名前探索の結果はオーバーロード集合 S である。

std::ranges 名前空間内の制約付きアルゴリズムは、アルゴリズム関数オブジェクトとして定義されています。その結果:

制約付きアルゴリズム

定義済みヘッダー <algorithm>
名前空間 std::ranges で定義
非変更シーケンス操作
述語が範囲内のすべての要素、いずれかの要素、またはいずれの要素に対しても true であるかどうかをチェックする
(アルゴリズム関数オブジェクト)
単項 function object range の要素に適用する
(algorithm function object)
関数オブジェクトをシーケンスの最初のN個の要素に適用する
(アルゴリズム関数オブジェクト)
特定の条件を満たす要素の数を返す
(アルゴリズム関数オブジェクト)
2つの範囲が最初に異なる位置を見つける
(アルゴリズム関数オブジェクト)
2つの要素の集合が同じかどうかを判定する
(アルゴリズム関数オブジェクト)
一方の範囲が他方よりも辞書順で小さい場合に true を返す
(アルゴリズム関数オブジェクト)
特定の条件を満たす最初の要素を見つける
(アルゴリズム関数オブジェクト)
特定の条件を満たす最後の要素を見つける
(アルゴリズム関数オブジェクト)
特定の範囲内で要素の最後のシーケンスを見つける
(アルゴリズム関数オブジェクト)
要素の集合のいずれかを検索する
(アルゴリズム関数オブジェクト)
等しい(または指定された述語を満たす)最初の隣接する2つの要素を検索する
(アルゴリズム関数オブジェクト)
要素の範囲の最初の出現を検索する
(アルゴリズム関数オブジェクト)
範囲内で指定された要素が連続して指定された数だけ現れる最初の位置を検索する
(アルゴリズム関数オブジェクト)
範囲が指定された要素または部分範囲を含むかどうかをチェックする
(アルゴリズム関数オブジェクト)
範囲が別の範囲で始まるかどうかをチェックする
(アルゴリズム関数オブジェクト)
範囲が別の範囲で終わるかどうかをチェックする
(アルゴリズム関数オブジェクト)
変更操作シーケンス
要素の範囲を新しい場所にコピーする
(アルゴリズム関数オブジェクト)
指定された数の要素を新しい場所にコピーする
(アルゴリズム関数オブジェクト)
要素の範囲を逆順にコピーする
(アルゴリズム関数オブジェクト)
要素の範囲を新しい位置に移動する
(アルゴリズム関数オブジェクト)
要素の範囲を逆順に新しい位置へ移動する
(アルゴリズム関数オブジェクト)
指定された範囲の要素に特定の値を代入する
(アルゴリズム関数オブジェクト)
指定された数の要素に値を割り当てる
(アルゴリズム関数オブジェクト)
範囲の要素に関数を適用する
(アルゴリズム関数オブジェクト)
関数の結果を範囲に保存する
(アルゴリズム関数オブジェクト)
関数をN回適用した結果を保存する
(アルゴリズム関数オブジェクト)
特定の条件を満たす要素を削除する
(アルゴリズム関数オブジェクト)
特定の条件を満たす要素を除外して範囲の要素をコピーする
(アルゴリズム関数オブジェクト)
特定の条件を満たすすべての値を別の値で置き換える
(アルゴリズム関数オブジェクト)
範囲をコピーし、特定の条件を満たす要素を別の値で置換する
(アルゴリズム関数オブジェクト)
2つの範囲の要素を交換する
(アルゴリズム関数オブジェクト)
範囲内の要素の順序を逆にする
(アルゴリズム関数オブジェクト)
逆順にされた範囲のコピーを作成する
(アルゴリズム関数オブジェクト)
範囲内の要素の順序を回転させる
(アルゴリズム関数オブジェクト)
要素の範囲をコピーして回転する
(アルゴリズム関数オブジェクト)
範囲内の要素をランダムに並べ替える
(アルゴリズム関数オブジェクト)
範囲内の要素をシフトする
(アルゴリズム関数オブジェクト)
シーケンスからN個のランダムな要素を選択する
(アルゴリズム関数オブジェクト)
範囲内の連続する重複要素を削除する
(アルゴリズム関数オブジェクト)
連続する重複を含まない範囲の要素のコピーを作成する
(アルゴリズム関数オブジェクト)
パーティショニング操作
指定された述語で範囲が分割されているかどうかを判定する
(アルゴリズム関数オブジェクト)
要素の範囲を2つのグループに分割する
(アルゴリズム関数オブジェクト)
範囲の要素を2つのグループに分けてコピーする
(アルゴリズム関数オブジェクト)
要素を二つのグループに分割し、それらの相対的な順序を保持する
(アルゴリズム関数オブジェクト)
分割済み範囲の分割点を特定する
(アルゴリズム関数オブジェクト)
ソート操作
範囲が昇順にソートされているかどうかをチェックする
(アルゴリズム関数オブジェクト)
最大のソート済み部分範囲を検索する
(アルゴリズム関数オブジェクト)
範囲を昇順にソートする
(アルゴリズム関数オブジェクト)
範囲の最初のN個の要素をソートする
(アルゴリズム関数オブジェクト)
要素の範囲をコピーして部分的にソートする
(アルゴリズム関数オブジェクト)
等しい要素間の順序を維持しながら範囲の要素をソートする
(アルゴリズム関数オブジェクト)
指定された要素によって分割されることを保証しながら、与えられた範囲を部分的にソートする
(アルゴリズム関数オブジェクト)
二分探索操作(ソート済み範囲に対する)
指定された値より 小さくない 最初の要素へのイテレータを返す
(アルゴリズム関数オブジェクト)
指定された値 より大きい 最初の要素へのイテレータを返す
(アルゴリズム関数オブジェクト)
部分的に順序付けられた範囲内に要素が存在するかどうかを判定する
(アルゴリズム関数オブジェクト)
特定のキーに一致する要素の範囲を返す
(アルゴリズム関数オブジェクト)
集合演算(ソート済み範囲に対する)
2つのソートされた範囲をマージする
(アルゴリズム関数オブジェクト)
2つの順序付けられた範囲をその場でマージする
(アルゴリズム関数オブジェクト)
あるシーケンスが別のシーケンスの部分シーケンスである場合に true を返す
(アルゴリズム関数オブジェクト)
2つの集合の差を計算する
(アルゴリズム関数オブジェクト)
2つの集合の積集合を計算する
(アルゴリズム関数オブジェクト)
2つの集合の対称差を計算する
(アルゴリズム関数オブジェクト)
2つの集合の和集合を計算する
(アルゴリズム関数オブジェクト)
ヒープ操作
指定された範囲が最大ヒープであるかどうかをチェックする
(アルゴリズム関数オブジェクト)
最大ヒープである最大の部分範囲を検索する
(アルゴリズム関数オブジェクト)
要素の範囲から最大ヒープを作成する
(アルゴリズム関数オブジェクト)
要素を最大ヒープに追加する
(アルゴリズム関数オブジェクト)
最大ヒープから最大要素を削除する
(アルゴリズム関数オブジェクト)
最大ヒープを昇順にソートされた要素の範囲に変換する
(アルゴリズム関数オブジェクト)
最小値/最大値 操作
指定された値のうち大きい方を返す
(アルゴリズム関数オブジェクト)
範囲内の最大要素を返す
(アルゴリズム関数オブジェクト)
指定された値のうち最小のものを返す
(アルゴリズム関数オブジェクト)
範囲内の最小要素を返す
(アルゴリズム関数オブジェクト)
2つの要素のうち小さい方と大きい方を返す
(アルゴリズム関数オブジェクト)
範囲内の最小要素と最大要素を返す
(アルゴリズム関数オブジェクト)
値を境界値のペアの間にクランプする
(アルゴリズム関数オブジェクト)
順列操作
あるシーケンスが別のシーケンスの順列であるかどうかを判定する
(アルゴリズム関数オブジェクト)
要素の範囲の次のより大きい辞書順の順列を生成する
(アルゴリズム関数オブジェクト)
要素の範囲の次のより小さい辞書順の順列を生成する
(アルゴリズム関数オブジェクト)

制約付き数値演算

ヘッダーで定義 <numeric>
名前空間で定義 std::ranges
範囲を開始値からの連続的な増分値で埋める
(アルゴリズム関数オブジェクト)

制約付き畳み込み操作

ヘッダーで定義 <algorithm>
名前空間で定義 std::ranges
要素の範囲を左畳み込みする
(アルゴリズム関数オブジェクト)
最初の要素を初期値として要素の範囲を左畳み込みする
(アルゴリズム関数オブジェクト)
要素の範囲を右畳み込みする
(アルゴリズム関数オブジェクト)
最後の要素を初期値として要素の範囲を右畳み込みする
(アルゴリズム関数オブジェクト)
要素の範囲を左畳み込みし、 pair (イテレータ, 値) を返す
(アルゴリズム関数オブジェクト)
最初の要素を初期値として要素の範囲を左畳み込みし、 pair (イテレータ, optional ) を返す
(アルゴリズム関数オブジェクト)

制約付き未初期化メモリアルゴリズム

定義済みヘッダ <memory>
定義済み名前空間 std::ranges
オブジェクトの範囲を未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
指定された数のオブジェクトを未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
オブジェクトを範囲で定義された未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
オブジェクトを開始位置とカウントで定義された未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
オブジェクトの範囲を未初期化メモリ領域にムーブする
(アルゴリズム関数オブジェクト)
指定された数のオブジェクトを未初期化メモリ領域にムーブする
(アルゴリズム関数オブジェクト)
範囲で定義された未初期化メモリ領域で デフォルト初期化 によりオブジェクトを構築する
(アルゴリズム関数オブジェクト)
開始位置とカウントで定義された未初期化メモリ領域で デフォルト初期化 によりオブジェクトを構築する
(アルゴリズム関数オブジェクト)
範囲で定義された未初期化メモリ領域で 値初期化 によりオブジェクトを構築する
(アルゴリズム関数オブジェクト)
開始位置とカウントで定義された未初期化メモリ領域で 値初期化 によりオブジェクトを構築する
(アルゴリズム関数オブジェクト)
オブジェクトの範囲を破棄する
(アルゴリズム関数オブジェクト)
範囲内の指定された数のオブジェクトを破棄する
(アルゴリズム関数オブジェクト)
指定されたアドレスのオブジェクトを破棄する
(アルゴリズム関数オブジェクト)
指定されたアドレスにオブジェクトを作成する
(アルゴリズム関数オブジェクト)

制約付き乱数生成アルゴリズム

ヘッダーで定義 <random>
名前空間で定義 std::ranges
範囲を一様乱数ビット生成器からの乱数で埋める
(アルゴリズム関数オブジェクト)

戻り値の型

ヘッダーで定義 <algorithm>
名前空間で定義 std::ranges
イテレータと関数オブジェクトを単一のユニットとして格納する方法を提供
(クラステンプレート)
2つのイテレータを単一のユニットとして格納する方法を提供
(クラステンプレート)
2つのイテレータを単一のユニットとして格納する方法を提供
(クラステンプレート)
3つのイテレータを単一のユニットとして格納する方法を提供
(クラステンプレート)
3つのイテレータを単一のユニットとして格納する方法を提供
(クラステンプレート)
同じ型の2つのオブジェクトまたは参照を単一のユニットとして格納する方法を提供
(クラステンプレート)
イテレータとブーリアンフラグを単一のユニットとして格納する方法を提供
(クラステンプレート)
イテレータと値を単一のユニットとして格納する方法を提供
(クラステンプレート)
イテレータと値を単一のユニットとして格納する方法を提供
(クラステンプレート)

注記

機能テスト マクロ 標準 機能
__cpp_lib_algorithm_default_value_type 202403L (C++26) リスト初期化 アルゴリズム用
__cpp_lib_ranges 201911L (C++20) レンジライブラリ および 制約付きアルゴリズム
__cpp_lib_ranges_contains 202207L (C++23) std::ranges::contains
__cpp_lib_ranges_find_last 202207L (C++23) std::ranges::find_last
__cpp_lib_ranges_fold 202207L (C++23) std::ranges 畳み込みアルゴリズム
__cpp_lib_ranges_iota 202202L (C++23) std::ranges::iota
__cpp_lib_ranges_starts_ends_with 202106L (C++23) std::ranges::starts_with , std::ranges::ends_with
__cpp_lib_shift 201806L (C++20) std::shift_left , std::shift_right
202202L (C++23) std::ranges::shift_left , std::ranges::shift_right
__cpp_lib_ranges_generate_random 202403L (C++26) std::ranges::generate_random

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
P3136R1 C++20 niebloidsは関数オブジェクト以外の特別なエンティティとして
指定可能であった
関数オブジェクトとして指定することが要求される