アルゴリズムライブラリ
algorithmライブラリは、要素の範囲(range)に対して作用する、様々な目的(例:検索、ソート、計数、操作)のための関数を定義しています。範囲(range)は [first, last) として定義されることに注意してください。ここで last は、検査または変更する最後の要素の次の要素を指します。
目次 |
[編集] 制約付きアルゴリズム (C++20から)
C++20では、名前空間 std::ranges 内にほとんどのアルゴリズムの制約付き版が提供されています。これらのアルゴリズムでは、範囲をイテレータと番兵のペア、または単一のrange引数として指定でき、射影(projection)およびメンバへのポインタ呼び出し可能オブジェクトがサポートされています。さらに、ほとんどのアルゴリズムの戻り値の型は、アルゴリズムの実行中に計算された潜在的に有用な情報をすべて返すように変更されています。
std::vector<int> v{7, 1, 4, 0, -1}; std::ranges::sort(v); // constrained algorithm
[編集] 実行ポリシー (C++17から)
ほとんどのアルゴリズムには、実行ポリシーを受け入れるオーバーロードがあります。標準ライブラリアルゴリズムは複数の実行ポリシーをサポートしており、ライブラリは対応する実行ポリシー型とオブジェクトを提供します。ユーザーは、対応する型の実行ポリシーオブジェクトを指定して並列アルゴリズムを呼び出すことにより、静的に実行ポリシーを選択できます。
標準ライブラリの実装(ユーザーではなく)は、拡張として追加の実行ポリシーを定義することができます。実装定義型の実行ポリシーオブジェクトで呼び出された並列アルゴリズムのセマンティクスは、実装定義です。
並列版のアルゴリズム(std::for_each と std::for_each_n を除く)は、std::is_trivially_copy_constructible_v<T> と std::is_trivially_destructible_v<T> の両方が true である限り、範囲内の要素の任意のコピーを作成することが許可されています。ここで T は要素の型です。
| ヘッダ
<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> で定義 | |
| 範囲内の要素に単項関数オブジェクトを適用する (関数テンプレート) | |
| (C++20) |
範囲内の要素に単項関数オブジェクトを適用する (アルゴリズム関数オブジェクト) |
| (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) |
特定の範囲内で最後の要素のシーケンスを見つける (アルゴリズム関数オブジェクト) |
| 要素の集合のうちいずれか1つを検索する (関数テンプレート) | |
| (C++20) |
要素の集合のうちいずれか1つを検索する (アルゴリズム関数オブジェクト) |
| 等しい(または指定された述語を満たす)最初の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) |
要素の範囲を左畳み込みし、ペア (イテレータ, 値) を返す (アルゴリズム関数オブジェクト) |
| 最初の要素を初期値として要素の範囲を左畳み込みし、ペア (イテレータ, optional) を返す (アルゴリズム関数オブジェクト) | |
[編集] シーケンスを変更する操作
[編集] コピー操作
| ヘッダー
<algorithm> で定義 | |
| (C++11) |
要素の範囲を新しい場所にコピーする (関数テンプレート) |
| (C++20)(C++20) |
要素の範囲を新しい場所にコピーする (アルゴリズム関数オブジェクト) |
| (C++11) |
指定された数の要素を新しい場所にコピーする (関数テンプレート) |
| (C++20) |
指定された数の要素を新しい場所にコピーする (アルゴリズム関数オブジェクト) |
| 要素の範囲を逆順にコピーする (関数テンプレート) | |
| (C++20) |
要素の範囲を逆順にコピーする (アルゴリズム関数オブジェクト) |
| (C++11) |
要素の範囲を新しい場所にムーブする (関数テンプレート) |
| (C++20) |
要素の範囲を新しい場所にムーブする (アルゴリズム関数オブジェクト) |
| (C++11) |
要素の範囲を逆順で新しい場所にムーブする (関数テンプレート) |
| (C++20) |
要素の範囲を逆順で新しい場所にムーブする (アルゴリズム関数オブジェクト) |
[編集] スワップ操作
| ヘッダ
<string_view> で定義 | |
| 2つのオブジェクトの値を交換する (関数テンプレート) | |
| ヘッダー
<algorithm> で定義 | |
| 2つの要素の範囲を交換する (関数テンプレート) | |
| (C++20) |
2つの要素の範囲を交換する (アルゴリズム関数オブジェクト) |
| 2つのイテレータが指す要素をスワップする (関数テンプレート) | |
[編集] 変換操作
| ヘッダー
<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個のランダムな要素を選択する (アルゴリズム関数オブジェクト) |
[編集]
[編集] 要件
一部のアルゴリズムでは、引数で表されるシーケンスが「ソート済み」または「パーティション化済み」であることを要求します。この要件が満たされていない場合、動作は未定義です。
|
シーケンスは、シーケンスを指す全てのイテレータ iter と、iter + n[1] がシーケンスの要素を指す有効なイテレータとなる全ての非負整数 n に対して comp(*(iter + n), *iter) == false[1] である場合、比較器 comp に関してソート済みです。 |
(C++20まで) |
|
シーケンスは、比較器 comp と射影 proj に対し、シーケンスを指す全てのイテレータ iter と、iter + n[1] がシーケンスの要素を指す有効なイテレータとなる全ての非負整数 n に対して、bool(std::invoke(comp, std::invoke(proj, *(iter + n)), シーケンスが comp と std::identity{}(恒等射影)に関してソート済みである場合、そのシーケンスは比較器 comp に関してソート済みです。 |
(C++20以降) |
シーケンス [start, finish) は、[0, std::distance(start, finish)) 内の全ての i に対して、i < n である場合に限り f(*(start + i))[1] が true となるような整数 n が存在する場合、式 f(e) に関してパーティション化済みです。
[編集] パーティション操作
| ヘッダー
<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 を返す (アルゴリズム関数オブジェクト) |
| 2つの集合の和を計算する (関数テンプレート) | |
| (C++20) |
2つの集合の和を計算する (アルゴリズム関数オブジェクト) |
| 2つの集合の積を計算する (関数テンプレート) | |
| (C++20) |
2つの集合の積を計算する (アルゴリズム関数オブジェクト) |
| 2つの集合の差を計算する (関数テンプレート) | |
| (C++20) |
2つの集合の差を計算する (アルゴリズム関数オブジェクト) |
| 2つの集合の対称差を計算する (関数テンプレート) | |
| 2つの集合の対称差を計算する (アルゴリズム関数オブジェクト) | |
[編集] マージ操作(ソート済み範囲に対して)
| ヘッダー
<algorithm> で定義 | |
| 2つのソート済み範囲をマージする (関数テンプレート) | |
| (C++20) |
2つのソート済み範囲をマージする (アルゴリズム関数オブジェクト) |
| 2つの順序付けられた範囲をインプレースでマージする (関数テンプレート) | |
| (C++20) |
2つの順序付けられた範囲をインプレースでマージする (アルゴリズム関数オブジェクト) |
[編集] ヒープ操作
|
ランダムアクセス範囲 |
(C++20まで) |
|
ランダムアクセス範囲 ランダムアクセス範囲 |
(C++20以降) |
ヒープは std::make_heap および ranges::make_heap(C++20から) によって作成できます。
ヒープのさらなる特性については、最大ヒープ を参照してください。
| ヘッダー
<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 を返す (関数テンプレート) | |
| ある範囲が別の範囲より辞書順で小さい場合に true を返す (アルゴリズム関数オブジェクト) | |
| 三方比較を用いて2つの範囲を比較する (関数テンプレート) | |
[編集] 順列操作
| ヘッダー
<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++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言語のドキュメント
|