Algorithms library
アルゴリズムライブラリは、要素の範囲に対して操作を行う多様な目的(探索、ソート、計数、操作など)の関数を定義します。なお、
範囲
は
[
first
,
last
)
として定義され、ここで
last
は検査または修正する最後の要素の
次
を指します。
目次 |
制約付きアルゴリズム (C++20以降)
C++20は名前空間
std::ranges
内のほとんどのアルゴリズムに対して
制約付き
バージョンを提供します。これらのアルゴリズムでは、
レンジ
は
イテレータ
-
センチネル
ペア、または単一の
range
引数として指定でき、射影とメンバへのポインタ呼び出し可能オブジェクトがサポートされます。さらに、ほとんどのアルゴリズムの
戻り値型
は、アルゴリズムの実行中に計算されたすべての潜在的に有用な情報を返すように変更されています。
std::vector<int> v{7, 1, 4, 0, -1}; std::ranges::sort(v); // 制約付きアルゴリズム
実行ポリシー (C++17以降)
ほとんどのアルゴリズムは実行ポリシーを受け入れるオーバーロードを持っています。標準ライブラリのアルゴリズムはいくつかの 実行ポリシー をサポートしており、ライブラリは対応する実行ポリシー型とオブジェクトを提供します。ユーザーは、対応する型の 実行ポリシーオブジェクト で並列アルゴリズムを呼び出すことで、静的に実行ポリシーを選択できます。
標準ライブラリの実装(ただしユーザーは除く)は、拡張として追加の実行ポリシーを定義してもよい。実装定義型の実行ポリシーオブジェクトで呼び出された並列アルゴリズムの意味論は実装定義である。
アルゴリズムの並列バージョン(
std::for_each
および
std::for_each_n
を除く)は、範囲内の要素の任意のコピーを作成することが許可されています。ただし、
std::
is_trivially_copy_constructible_v
<
T
>
および
std::
is_trivially_destructible_v
<
T
>
がともに
true
である場合に限ります。ここで
T
は要素の型です。
`, `
` 内のC++コードは翻訳していません
3. **C++用語の保持**: `std::for_each`, `std::for_each_n`, `std::is_trivially_copy_constructible_v`, `std::is_trivially_destructible_v` などのC++固有の用語は原文のまま保持
4. **技術的な正確性**: アルゴリズムの並列バージョンに関する条件を正確に翻訳
5. **自然な日本語表現**: 技術文書に適したフォーマルで正確な日本語を使用
|
ヘッダーで定義
<execution>
|
|
|
名前空間で定義
std::execution
|
|
|
(C++17)
(C++17)
(C++17)
(C++20)
|
実行ポリシー型
(クラス) |
|
(C++17)
(C++17)
(C++17)
(C++20)
|
グローバル実行ポリシーオブジェクト
(定数) |
|
名前空間で定義
std
|
|
|
(C++17)
|
クラスが実行ポリシーを表すかどうかをテストする
(クラステンプレート) |
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_parallel_algorithm
|
201603L
|
(C++17) | 並列アルゴリズム |
__cpp_lib_execution
|
201603L
|
(C++17) | 実行ポリシー |
201902L
|
(C++20) | std::execution::unsequenced_policy |
非変更シーケンス操作
バッチ操作
|
ヘッダーで定義
<algorithm>
|
|
|
範囲の要素に対して単項
function object
を適用する
(関数テンプレート) |
|
|
(C++20)
|
範囲の要素に対して単項
function object
を適用する
(アルゴリズム関数オブジェクト) |
|
(C++17)
|
シーケンスの最初のN個の要素に関数オブジェクトを適用する
(関数テンプレート) |
|
(C++20)
|
シーケンスの最初のN個の要素に関数オブジェクトを適用する
(アルゴリズム関数オブジェクト) |
検索操作
|
ヘッダーで定義
<algorithm>
|
|
|
(C++11)
(C++11)
(C++11)
|
範囲内のすべての要素、いずれかの要素、またはいずれの要素に対しても述語が
true
であるかどうかをチェックする
(関数テンプレート) |
|
(C++20)
(C++20)
(C++20)
|
範囲内のすべての要素、いずれかの要素、またはいずれの要素に対しても述語が
true
を返すかどうかをチェックする
(アルゴリズム関数オブジェクト) |
|
(C++23)
(C++23)
|
範囲が指定された要素または部分範囲を含むかどうかをチェックする
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
特定の条件を満たす最初の要素を見つける
(関数テンプレート) |
|
(C++20)
(C++20)
(C++20)
|
特定の条件を満たす最初の要素を見つける
(アルゴリズム関数オブジェクト) |
|
(C++23)
(C++23)
(C++23)
|
特定の条件を満たす最後の要素を検索する
(アルゴリズム関数オブジェクト) |
|
特定の範囲内で要素の最後のシーケンスを見つける
(関数テンプレート) |
|
|
(C++20)
|
特定の範囲内で要素の最後のシーケンスを見つける
(アルゴリズム関数オブジェクト) |
|
要素の集合のいずれかを検索します
(関数テンプレート) |
|
|
(C++20)
|
要素の集合のいずれかを検索する
(アルゴリズム関数オブジェクト) |
|
等しい(または指定された述語を満たす)最初の隣接する2つの要素を検索する
(関数テンプレート) |
|
|
(C++20)
|
等しい(または指定された述語を満たす)最初の隣接する2つの要素を検索する
(アルゴリズム関数オブジェクト) |
|
特定の条件を満たす要素の数を返す
(関数テンプレート) |
|
|
(C++20)
(C++20)
|
特定の条件を満たす要素の数を返す
(アルゴリズム関数オブジェクト) |
|
2つの範囲が最初に異なる位置を見つける
(関数テンプレート) |
|
|
(C++20)
|
2つの範囲が最初に異なる位置を見つける
(アルゴリズム関数オブジェクト) |
|
2つの要素セットが同じかどうかを判定する
(関数テンプレート) |
|
|
(C++20)
|
2つの要素の集合が同じかどうかを判定する
(アルゴリズム関数オブジェクト) |
|
要素の範囲の最初の出現を検索する
(関数テンプレート) |
|
|
(C++20)
|
要素の範囲の最初の出現を検索する
(アルゴリズム関数オブジェクト) |
|
範囲内で指定された要素が連続して指定された数だけ現れる最初の位置を検索する
(関数テンプレート) |
|
|
(C++20)
|
範囲内で指定された要素が連続して指定された数だけ現れる最初の位置を検索する
(アルゴリズム関数オブジェクト) |
|
(C++23)
|
範囲が別の範囲で始まるかどうかをチェックする
(アルゴリズム関数オブジェクト) |
|
(C++23)
|
範囲が別の範囲で終わるかどうかをチェックする
(アルゴリズム関数オブジェクト) |
畳み込み操作 (C++23以降)
|
ヘッダーで定義
<algorithm>
|
|
|
(C++23)
|
要素の範囲を左畳み込みする
(アルゴリズム関数オブジェクト) |
|
(C++23)
|
最初の要素を初期値として要素の範囲を左畳み込みする
(アルゴリズム関数オブジェクト) |
|
(C++23)
|
要素の範囲を右畳み込みする
(アルゴリズム関数オブジェクト) |
|
(C++23)
|
最後の要素を初期値として要素の範囲を右畳み込みする
(アルゴリズム関数オブジェクト) |
|
(C++23)
|
要素の範囲を左畳み込みし、
pair
(イテレータ, 値) を返す
(アルゴリズム関数オブジェクト) |
|
最初の要素を初期値として要素の範囲を左畳み込みし、
pair
(イテレータ,
optional
) を返す
(アルゴリズム関数オブジェクト) |
|
シーケンス操作の変更
コピー操作
|
定義ヘッダ
<algorithm>
|
|
|
(C++11)
|
要素の範囲を新しい場所にコピーする
(関数テンプレート) |
|
(C++20)
(C++20)
|
要素の範囲を新しい場所にコピーする
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
指定された数の要素を新しい場所にコピーする
(関数テンプレート) |
|
(C++20)
|
指定された数の要素を新しい場所にコピーする
(アルゴリズム関数オブジェクト) |
|
要素の範囲を逆順でコピーする
(関数テンプレート) |
|
|
(C++20)
|
要素の範囲を逆順でコピーする
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
要素の範囲を新しい場所にムーブする
(関数テンプレート) |
|
(C++20)
|
要素の範囲を新しい場所にムーブする
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
要素の範囲を逆順で新しい場所にムーブする
(関数テンプレート) |
|
(C++20)
|
要素の範囲を逆順で新しい場所にムーブする
(アルゴリズム関数オブジェクト) |
スワップ操作
|
ヘッダーで定義
<string_view>
|
|
|
二つのオブジェクトの値を交換する
(関数テンプレート) |
|
|
ヘッダーで定義
<algorithm>
|
|
|
二つの範囲の要素を交換する
(関数テンプレート) |
|
|
(C++20)
|
二つの範囲の要素を交換する
(アルゴリズム関数オブジェクト) |
|
二つのイテレータが指す要素を交換する
(関数テンプレート) |
|
変換操作
|
定義済みヘッダ
<algorithm>
|
|
|
要素の範囲に関数を適用し、結果を宛先範囲に格納する
(関数テンプレート) |
|
|
(C++20)
|
要素の範囲に関数を適用する
(アルゴリズム関数オブジェクト) |
|
特定の条件を満たすすべての値を別の値で置換する
(関数テンプレート) |
|
|
(C++20)
(C++20)
|
特定の条件を満たすすべての値を別の値で置換する
(アルゴリズム関数オブジェクト) |
|
範囲をコピーし、特定の条件を満たす要素を別の値で置換する
(関数テンプレート) |
|
|
(C++20)
(C++20)
|
範囲をコピーし、特定の条件を満たす要素を別の値で置換する
(アルゴリズム関数オブジェクト) |
生成操作
|
ヘッダーで定義
<algorithm>
|
|
|
指定された値を範囲内のすべての要素にコピー代入する
(関数テンプレート) |
|
|
(C++20)
|
範囲の要素に特定の値を代入する
(アルゴリズム関数オブジェクト) |
|
指定された値を範囲内のN個の要素にコピー代入する
(関数テンプレート) |
|
|
(C++20)
|
複数の要素に値を代入する
(アルゴリズム関数オブジェクト) |
|
連続する関数呼び出しの結果を範囲内のすべての要素に代入する
(関数テンプレート) |
|
|
(C++20)
|
関数の結果を範囲に保存する
(アルゴリズム関数オブジェクト) |
|
連続する関数呼び出しの結果を範囲内のN個の要素に代入する
(関数テンプレート) |
|
|
(C++20)
|
関数のN回の適用結果を保存する
(アルゴリズム関数オブジェクト) |
削除操作
|
ヘッダーで定義
<algorithm>
|
|
|
特定の条件を満たす要素を削除する
(関数テンプレート) |
|
|
(C++20)
(C++20)
|
特定の条件を満たす要素を削除する
(アルゴリズム関数オブジェクト) |
|
特定の条件を満たす要素を除外して範囲の要素をコピーする
(関数テンプレート) |
|
|
(C++20)
(C++20)
|
特定の条件を満たす要素を除外して範囲の要素をコピーする
(アルゴリズム関数オブジェクト) |
|
範囲内の連続した重複要素を削除する
(関数テンプレート) |
|
|
(C++20)
|
範囲内の連続した重複要素を削除する
(アルゴリズム関数オブジェクト) |
|
連続した重複を含まない範囲のコピーを作成する
(関数テンプレート) |
|
|
(C++20)
|
連続した重複を含まない範囲のコピーを作成する
(アルゴリズム関数オブジェクト) |
順序変更操作
|
ヘッダーで定義
<algorithm>
|
|
|
範囲内の要素の順序を反転する
(関数テンプレート) |
|
|
(C++20)
|
範囲内の要素の順序を反転する
(アルゴリズム関数オブジェクト) |
|
反転された範囲のコピーを作成する
(関数テンプレート) |
|
|
(C++20)
|
反転された範囲のコピーを作成する
(アルゴリズム関数オブジェクト) |
|
範囲内の要素の順序を回転する
(関数テンプレート) |
|
|
(C++20)
|
範囲内の要素の順序を回転する
(アルゴリズム関数オブジェクト) |
|
要素の範囲をコピーして回転する
(関数テンプレート) |
|
|
(C++20)
|
要素の範囲をコピーして回転する
(アルゴリズム関数オブジェクト) |
|
(C++20)
|
範囲内の要素をシフトする
(関数テンプレート) |
|
範囲内の要素をシフトする
(アルゴリズム関数オブジェクト) |
|
|
(C++17まで)
(C++11)
|
範囲内の要素をランダムに並べ替える
(関数テンプレート) |
|
(C++20)
|
範囲内の要素をランダムに並べ替える
(アルゴリズム関数オブジェクト) |
サンプリング操作
|
ヘッダーで定義
<algorithm>
|
|
|
(C++17)
|
シーケンスからN個のランダムな要素を選択
(関数テンプレート) |
|
(C++20)
|
シーケンスからN個のランダムな要素を選択
(アルゴリズム関数オブジェクト) |
要件
一部のアルゴリズムは、引数で表されるシーケンスが「ソート済み」または「パーティション化済み」であることを要求します。要件が満たされていない場合、動作は未定義です。
|
シーケンスは、コンパレータ comp に関して ソートされている とは、シーケンスを指すすべてのイテレータ iter と、非負の整数 n に対して、 iter + n [1] がシーケンスの要素を指す 有効なイテレータ であるとき、 comp ( * ( iter + n ) , * iter ) == false [1] が成り立つことをいう。 |
(C++20まで) |
|
シーケンスは、コンパレータ
comp
と射影
proj
に関して
ソートされている
とは、シーケンスを指すすべてのイテレータ
iter
と、非負の整数
n
に対して、
iter
+
n
[1]
がシーケンスの要素を指す有効なイテレータであるとき、
bool
(
std::
invoke
(
comp,
std::
invoke
(
proj,
*
(
iter
+
n
)
)
,
シーケンスがコンパレータ comp に関して ソートされている とは、シーケンスが comp と std:: identity { } (恒等射影)に関してソートされていることをいう。 |
(C++20以降) |
シーケンス
[
start
,
finish
)
は、式
f
(
e
)
に関して分割されている
とは、ある整数
n
が存在して、
[
0
,
std::
distance
(
start, finish
)
)
内のすべての
i
について、
f
(
*
(
start
+
i
)
)
[1]
が
true
となるのは
i
<
n
の場合に限るときを言う。
- ↑ 1.0 1.1 1.2 1.3 1.4 iter + n は単に「 iter が n 回インクリメントされた結果」を意味し、 iter がランダムアクセスイテレータであるかどうかに関わらず適用されます。
パーティショニング操作
|
定義済みヘッダ
<algorithm>
|
|
|
(C++11)
|
指定された述語で範囲が分割されているかどうかを判定する
(関数テンプレート) |
|
(C++20)
|
指定された述語で範囲が分割されているかどうかを判定する
(アルゴリズム関数オブジェクト) |
|
要素の範囲を2つのグループに分割する
(関数テンプレート) |
|
|
(C++20)
|
要素の範囲を2つのグループに分割する
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
要素を2つのグループに分割して範囲をコピーする
(関数テンプレート) |
|
(C++20)
|
要素を2つのグループに分割して範囲をコピーする
(アルゴリズム関数オブジェクト) |
|
要素の相対的な順序を保持しながら2つのグループに分割する
(関数テンプレート) |
|
|
(C++20)
|
要素の相対的な順序を保持しながら2つのグループに分割する
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
分割された範囲の分割点を特定する
(関数テンプレート) |
|
(C++20)
|
分割された範囲の分割点を特定する
(アルゴリズム関数オブジェクト) |
ソート操作
|
ヘッダーで定義
<algorithm>
|
|
|
範囲を昇順にソートする
(関数テンプレート) |
|
|
(C++20)
|
範囲を昇順にソートする
(アルゴリズム関数オブジェクト) |
|
等しい要素間の順序を保ちながら範囲をソートする
(関数テンプレート) |
|
|
(C++20)
|
等しい要素間の順序を保ちながら範囲をソートする
(アルゴリズム関数オブジェクト) |
|
範囲の最初のN個の要素をソートする
(関数テンプレート) |
|
|
(C++20)
|
範囲の最初のN個の要素をソートする
(アルゴリズム関数オブジェクト) |
|
範囲の要素をコピーして部分的にソートする
(関数テンプレート) |
|
|
(C++20)
|
範囲の要素をコピーして部分的にソートする
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
範囲が昇順にソートされているかどうかをチェックする
(関数テンプレート) |
|
(C++20)
|
範囲が昇順にソートされているかどうかをチェックする
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
最大のソート済み部分範囲を見つける
(関数テンプレート) |
|
(C++20)
|
最大のソート済み部分範囲を見つける
(アルゴリズム関数オブジェクト) |
|
指定された要素で分割されることを保証しながら範囲を部分的にソートする
(関数テンプレート) |
|
|
(C++20)
|
指定された要素で分割されることを保証しながら範囲を部分的にソートする
(アルゴリズム関数オブジェクト) |
二分探索操作(分割済み範囲に対する)
|
定義済みヘッダー
<algorithm>
|
|
|
指定された値より
小さくない
最初の要素へのイテレータを返す
(関数テンプレート) |
|
|
(C++20)
|
指定された値より
小さくない
最初の要素へのイテレータを返す
(アルゴリズム関数オブジェクト) |
|
指定された値より
大きい
最初の要素へのイテレータを返す
(関数テンプレート) |
|
|
(C++20)
|
指定された値より
大きい
最初の要素へのイテレータを返す
(アルゴリズム関数オブジェクト) |
|
特定のキーに一致する要素の範囲を返す
(関数テンプレート) |
|
|
(C++20)
|
特定のキーに一致する要素の範囲を返す
(アルゴリズム関数オブジェクト) |
|
要素が半順序範囲内に存在するかどうかを判定する
(関数テンプレート) |
|
|
(C++20)
|
要素が半順序範囲内に存在するかどうかを判定する
(アルゴリズム関数オブジェクト) |
集合演算 (ソート済み範囲に対する)
|
定義済みヘッダ
<algorithm>
|
|
|
一方のシーケンスが他方の部分シーケンスである場合に
true
を返す
(関数テンプレート) |
|
|
(C++20)
|
一方のシーケンスが他方の部分シーケンスである場合に
true
を返す
(アルゴリズム関数オブジェクト) |
|
二つの集合の和集合を計算する
(関数テンプレート) |
|
|
(C++20)
|
二つの集合の和集合を計算する
(アルゴリズム関数オブジェクト) |
|
二つの集合の積集合を計算する
(関数テンプレート) |
|
|
(C++20)
|
二つの集合の積集合を計算する
(アルゴリズム関数オブジェクト) |
|
二つの集合の差集合を計算する
(関数テンプレート) |
|
|
(C++20)
|
二つの集合の差集合を計算する
(アルゴリズム関数オブジェクト) |
|
二つの集合の対称差を計算する
(関数テンプレート) |
|
|
(C++20)
|
二つの集合の対称差を計算する
(アルゴリズム関数オブジェクト) |
マージ操作(ソート済み範囲に対する)
|
定義済みヘッダー
<algorithm>
|
|
|
2つのソート済み範囲をマージする
(関数テンプレート) |
|
|
(C++20)
|
2つのソート済み範囲をマージする
(アルゴリズム関数オブジェクト) |
|
2つの順序付けられた範囲をインプレースでマージする
(関数テンプレート) |
|
|
(C++20)
|
2つの順序付けられた範囲をインプレースでマージする
(アルゴリズム関数オブジェクト) |
ヒープ操作
|
ランダムアクセス
range
|
(C++20以前) |
|
ランダムアクセス
range
ランダムアクセス
range
|
(C++20以降) |
ヒープは std::make_heap および ranges::make_heap (C++20以降) によって作成できます。
ヒープのさらなる特性については、 max heap を参照してください。
|
ヘッダーで定義
<algorithm>
|
|
|
最大ヒープに要素を追加する
(関数テンプレート) |
|
|
(C++20)
|
最大ヒープに要素を追加する
(アルゴリズム関数オブジェクト) |
|
最大ヒープから最大要素を削除する
(関数テンプレート) |
|
|
(C++20)
|
最大ヒープから最大要素を削除する
(アルゴリズム関数オブジェクト) |
|
要素の範囲から最大ヒープを作成する
(関数テンプレート) |
|
|
(C++20)
|
要素の範囲から最大ヒープを作成する
(アルゴリズム関数オブジェクト) |
|
最大ヒープを昇順にソートされた要素範囲に変換する
(関数テンプレート) |
|
|
(C++20)
|
最大ヒープを昇順にソートされた要素範囲に変換する
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
指定された範囲が最大ヒープかどうかをチェックする
(関数テンプレート) |
|
(C++20)
|
指定された範囲が最大ヒープかどうかをチェックする
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
最大ヒープである最大の部分範囲を見つける
(関数テンプレート) |
|
(C++20)
|
最大ヒープである最大の部分範囲を見つける
(アルゴリズム関数オブジェクト) |
最小値/最大値演算
|
ヘッダーで定義
<algorithm>
|
|
|
指定された値のうち大きい方を返す
(関数テンプレート) |
|
|
(C++20)
|
指定された値のうち大きい方を返す
(アルゴリズム関数オブジェクト) |
|
範囲内の最大要素を返す
(関数テンプレート) |
|
|
(C++20)
|
範囲内の最大要素を返す
(アルゴリズム関数オブジェクト) |
|
指定された値のうち小さい方を返す
(関数テンプレート) |
|
|
(C++20)
|
指定された値のうち小さい方を返す
(アルゴリズム関数オブジェクト) |
|
範囲内の最小要素を返す
(関数テンプレート) |
|
|
(C++20)
|
範囲内の最小要素を返す
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
2つの要素の小さい方と大きい方を返す
(関数テンプレート) |
|
(C++20)
|
2つの要素の小さい方と大きい方を返す
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
範囲内の最小要素と最大要素を返す
(関数テンプレート) |
|
(C++20)
|
範囲内の最小要素と最大要素を返す
(アルゴリズム関数オブジェクト) |
|
(C++17)
|
値を境界値のペアの間にクランプする
(関数テンプレート) |
|
(C++20)
|
値を境界値のペアの間にクランプする
(アルゴリズム関数オブジェクト) |
辞書式比較演算
|
ヘッダーで定義
<algorithm>
|
|
|
一方の範囲が他方よりも辞書順で小さい場合に
true
を返す
(関数テンプレート) |
|
|
(C++20)
|
一方の範囲が他方よりも辞書順で小さい場合に
true
を返す
(アルゴリズム関数オブジェクト) |
|
三方比較を使用して二つの範囲を比較する
(関数テンプレート) |
|
順列操作
|
ヘッダーで定義
<algorithm>
|
|
|
要素の範囲の次に大きい辞書順の順列を生成する
(関数テンプレート) |
|
|
(C++20)
|
要素の範囲の次に大きい辞書順の順列を生成する
(アルゴリズム関数オブジェクト) |
|
要素の範囲の次に小さい辞書順の順列を生成する
(関数テンプレート) |
|
|
(C++20)
|
要素の範囲の次に小さい辞書順の順列を生成する
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
あるシーケンスが別のシーケンスの順列であるかどうかを判定する
(関数テンプレート) |
|
(C++20)
|
あるシーケンスが別のシーケンスの順列であるかどうかを判定する
(アルゴリズム関数オブジェクト) |
数値演算
|
ヘッダーで定義
<numeric>
|
|
|
(C++11)
|
範囲を開始値からの連続的な増分値で埋める
(関数テンプレート) |
|
(C++23)
|
範囲を開始値からの連続的な増分値で埋める
(アルゴリズム関数オブジェクト) |
|
要素の範囲を合計または畳み込む
(関数テンプレート) |
|
|
2つの要素範囲の内積を計算する
(関数テンプレート) |
|
|
範囲内の隣接する要素間の差分を計算する
(関数テンプレート) |
|
|
要素範囲の部分和を計算する
(関数テンプレート) |
|
|
(C++17)
|
std::accumulate
と類似するが、順序不同
(関数テンプレート) |
|
(C++17)
|
std::partial_sum
と類似するが、
i
番目の
入力要素を
i
番目の
和から除外する
(関数テンプレート) |
|
(C++17)
|
std::partial_sum
と類似するが、
i
番目の
入力要素を
i
番目の
和に含める
(関数テンプレート) |
|
(C++17)
|
呼び出し可能オブジェクトを適用した後、順序不同で縮約する
(関数テンプレート) |
|
(C++17)
|
呼び出し可能オブジェクトを適用した後、排他的スキャンを計算する
(関数テンプレート) |
|
(C++17)
|
呼び出し可能オブジェクトを適用した後、包括的スキャンを計算する
(関数テンプレート) |
未初期化メモリに対する操作
|
ヘッダーで定義
<memory>
|
|
|
オブジェクトの範囲を未初期化メモリ領域にコピーする
(関数テンプレート) |
|
|
(C++20)
|
オブジェクトの範囲を未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト) |
|
(C++11)
|
未初期化メモリ領域に指定数のオブジェクトをコピーする
(関数テンプレート) |
|
(C++20)
|
指定された数のオブジェクトを未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト) |
|
範囲で定義された未初期化メモリ領域にオブジェクトをコピーする
(関数テンプレート) |
|
|
(C++20)
|
オブジェクトを範囲で定義された未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト) |
|
オブジェクトを開始位置とカウントで定義される未初期化メモリ領域にコピーする
(関数テンプレート) |
|
|
(C++20)
|
オブジェクトを開始点とカウントで定義される未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト) |
|
(C++17)
|
オブジェクトの範囲を未初期化メモリ領域にムーブする
(関数テンプレート) |
|
(C++20)
|
オブジェクトの範囲を未初期化メモリ領域にムーブする
(アルゴリズム関数オブジェクト) |
|
(C++17)
|
指定された数のオブジェクトを未初期化メモリ領域へ移動する
(関数テンプレート) |
|
(C++20)
|
指定された数のオブジェクトを未初期化メモリ領域にムーブする
(アルゴリズム関数オブジェクト) |
|
(C++17)
|
未初期化メモリ領域内の範囲で定義されたオブジェクトを
デフォルト初期化
によって構築する
(関数テンプレート) |
|
未初期化メモリ領域内の範囲でオブジェクトを
デフォルト初期化
によって構築する
(アルゴリズム関数オブジェクト) |
|
|
開始位置とカウントで定義される未初期化メモリ領域内のオブジェクトを
デフォルト初期化
によって構築する
(関数テンプレート) |
|
|
開始位置と要素数で定義される未初期化メモリ領域内のオブジェクトを
デフォルト初期化
によって構築する
(アルゴリズム関数オブジェクト) |
|
|
(C++17)
|
未初期化のメモリ領域内の範囲で、
value-initialization
によってオブジェクトを構築する
(関数テンプレート) |
|
未初期化メモリ領域内のオブジェクトを
value-initialization
によって構築する(範囲で定義)
(アルゴリズム関数オブジェクト) |
|
|
(C++17)
|
未初期化メモリ領域で、開始位置とカウントで定義されたオブジェクトを
value-initialization
によって構築する
(関数テンプレート) |
|
未初期化メモリ領域内の開始位置と要素数で定義される範囲に、
value-initialization
によってオブジェクトを構築する
(アルゴリズム関数オブジェクト) |
|
|
(C++17)
|
オブジェクトの範囲を破棄する
(関数テンプレート) |
|
(C++20)
|
オブジェクトの範囲を破棄する
(アルゴリズム関数オブジェクト) |
|
(C++17)
|
範囲内の複数のオブジェクトを破棄する
(関数テンプレート) |
|
(C++20)
|
範囲内の指定された数のオブジェクトを破棄する
(アルゴリズム関数オブジェクト) |
|
(C++17)
|
指定されたアドレスのオブジェクトを破棄する
(関数テンプレート) |
|
(C++20)
|
指定されたアドレスのオブジェクトを破棄する
(アルゴリズム関数オブジェクト) |
|
(C++20)
|
指定されたアドレスにオブジェクトを作成する
(関数テンプレート) |
|
(C++20)
|
指定されたアドレスにオブジェクトを作成する
(アルゴリズム関数オブジェクト) |
乱数生成 (C++26以降)
|
定義済みヘッダー
<random>
|
|
|
(C++26)
|
範囲を一様ランダムビット生成器からの乱数で埋める
(アルゴリズム関数オブジェクト) |
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_algorithm_iterator_requirements
|
202207L
|
(C++23) | 非Rangesアルゴリズムへの入力としてのRangesイテレータ |
__cpp_lib_clamp
|
201603L
|
(C++17) | std::clamp |
__cpp_lib_constexpr_algorithms
|
201806L
|
(C++20) | アルゴリズムのconstexpr化 |
202306L
|
(C++26) | constexpr安定ソート | |
__cpp_lib_algorithm_default_value_type
|
202403L
|
(C++26) | リスト初期化 のアルゴリズムへの適用 |
__cpp_lib_freestanding_algorithm
|
202311L
|
(C++26) | <algorithm> 内のフリースタンディング機能 |
__cpp_lib_robust_nonmodifying_seq_ops
|
201304L
|
(C++14) | 非変更シーケンス操作の堅牢化( std::mismatch 、 std::equal 、 std::is_permutation の2範囲オーバーロード) |
__cpp_lib_sample
|
201603L
|
(C++17) | std::sample |
__cpp_lib_shift
|
201806L
|
(C++20) | std::shift_left および std::shift_right |
Cライブラリ
|
ヘッダーで定義
<cstdlib>
|
|
|
未指定の型の要素範囲をソート
(関数) |
|
|
配列から未指定の型の要素を検索
(関数) |
|
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 193 | C++98 | ヒープは * first が最大要素であることを要求 | * first と等しい要素が存在可能 |
| LWG 2150 | C++98 | ソート済みシーケンスの定義が不正確 | 修正済み |
| LWG 2166 | C++98 | ヒープ要件が 最大ヒープ の定義に十分一致していなかった | 要件改善 |
関連項目
|
Cドキュメント
for
アルゴリズム
|