Namespaces
Variants

Algorithms library

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

アルゴリズムライブラリは、要素の範囲に対して操作を行う多様な目的(探索、ソート、計数、操作など)の関数を定義します。なお、 範囲 [ 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 は要素の型です。

## 翻訳の特徴 1. **HTMLタグ・属性の保持**: すべてのHTMLタグと属性は完全に保持されています 2. **コードブロックの非翻訳**: ` `, ` ` 内の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)
グローバル実行ポリシーオブジェクト
(定数)
名前空間で定義 std
クラスが実行ポリシーを表すかどうかをテストする
(クラステンプレート)
機能テスト マクロ 標準 機能
__cpp_lib_parallel_algorithm 201603L (C++17) 並列アルゴリズム
__cpp_lib_execution 201603L (C++17) 実行ポリシー
201902L (C++20) std::execution::unsequenced_policy

非変更シーケンス操作

バッチ操作

ヘッダーで定義 <algorithm>
範囲の要素に対して単項 function object を適用する
(関数テンプレート)
範囲の要素に対して単項 function object を適用する
(アルゴリズム関数オブジェクト)
(C++17)
シーケンスの最初のN個の要素に関数オブジェクトを適用する
(関数テンプレート)
シーケンスの最初のN個の要素に関数オブジェクトを適用する
(アルゴリズム関数オブジェクト)

検索操作

ヘッダーで定義 <algorithm>
(C++11) (C++11) (C++11)
範囲内のすべての要素、いずれかの要素、またはいずれの要素に対しても述語が true であるかどうかをチェックする
(関数テンプレート)
範囲内のすべての要素、いずれかの要素、またはいずれの要素に対しても述語が true を返すかどうかをチェックする
(アルゴリズム関数オブジェクト)
範囲が指定された要素または部分範囲を含むかどうかをチェックする
(アルゴリズム関数オブジェクト)
特定の条件を満たす最初の要素を見つける
(関数テンプレート)
特定の条件を満たす最初の要素を見つける
(アルゴリズム関数オブジェクト)
特定の条件を満たす最後の要素を検索する
(アルゴリズム関数オブジェクト)
特定の範囲内で要素の最後のシーケンスを見つける
(関数テンプレート)
特定の範囲内で要素の最後のシーケンスを見つける
(アルゴリズム関数オブジェクト)
要素の集合のいずれかを検索します
(関数テンプレート)
要素の集合のいずれかを検索する
(アルゴリズム関数オブジェクト)
等しい(または指定された述語を満たす)最初の隣接する2つの要素を検索する
(関数テンプレート)
等しい(または指定された述語を満たす)最初の隣接する2つの要素を検索する
(アルゴリズム関数オブジェクト)
特定の条件を満たす要素の数を返す
(関数テンプレート)
特定の条件を満たす要素の数を返す
(アルゴリズム関数オブジェクト)
2つの範囲が最初に異なる位置を見つける
(関数テンプレート)
2つの範囲が最初に異なる位置を見つける
(アルゴリズム関数オブジェクト)
2つの要素セットが同じかどうかを判定する
(関数テンプレート)
2つの要素の集合が同じかどうかを判定する
(アルゴリズム関数オブジェクト)
要素の範囲の最初の出現を検索する
(関数テンプレート)
要素の範囲の最初の出現を検索する
(アルゴリズム関数オブジェクト)
範囲内で指定された要素が連続して指定された数だけ現れる最初の位置を検索する
(関数テンプレート)
範囲内で指定された要素が連続して指定された数だけ現れる最初の位置を検索する
(アルゴリズム関数オブジェクト)
範囲が別の範囲で始まるかどうかをチェックする
(アルゴリズム関数オブジェクト)
範囲が別の範囲で終わるかどうかをチェックする
(アルゴリズム関数オブジェクト)

畳み込み操作 (C++23以降)

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

シーケンス操作の変更

コピー操作

定義ヘッダ <algorithm>
要素の範囲を新しい場所にコピーする
(関数テンプレート)
要素の範囲を新しい場所にコピーする
(アルゴリズム関数オブジェクト)
(C++11)
指定された数の要素を新しい場所にコピーする
(関数テンプレート)
指定された数の要素を新しい場所にコピーする
(アルゴリズム関数オブジェクト)
要素の範囲を逆順でコピーする
(関数テンプレート)
要素の範囲を逆順でコピーする
(アルゴリズム関数オブジェクト)
(C++11)
要素の範囲を新しい場所にムーブする
(関数テンプレート)
要素の範囲を新しい場所にムーブする
(アルゴリズム関数オブジェクト)
要素の範囲を逆順で新しい場所にムーブする
(関数テンプレート)
要素の範囲を逆順で新しい場所にムーブする
(アルゴリズム関数オブジェクト)

スワップ操作

ヘッダーで定義 <algorithm> (C++11まで)
ヘッダーで定義 <utility> (C++11から)
ヘッダーで定義 <string_view>
二つのオブジェクトの値を交換する
(関数テンプレート)
ヘッダーで定義 <algorithm>
二つの範囲の要素を交換する
(関数テンプレート)
二つの範囲の要素を交換する
(アルゴリズム関数オブジェクト)
二つのイテレータが指す要素を交換する
(関数テンプレート)

変換操作

定義済みヘッダ <algorithm>
要素の範囲に関数を適用し、結果を宛先範囲に格納する
(関数テンプレート)
要素の範囲に関数を適用する
(アルゴリズム関数オブジェクト)
特定の条件を満たすすべての値を別の値で置換する
(関数テンプレート)
特定の条件を満たすすべての値を別の値で置換する
(アルゴリズム関数オブジェクト)
範囲をコピーし、特定の条件を満たす要素を別の値で置換する
(関数テンプレート)
範囲をコピーし、特定の条件を満たす要素を別の値で置換する
(アルゴリズム関数オブジェクト)

生成操作

ヘッダーで定義 <algorithm>
指定された値を範囲内のすべての要素にコピー代入する
(関数テンプレート)
範囲の要素に特定の値を代入する
(アルゴリズム関数オブジェクト)
指定された値を範囲内のN個の要素にコピー代入する
(関数テンプレート)
複数の要素に値を代入する
(アルゴリズム関数オブジェクト)
連続する関数呼び出しの結果を範囲内のすべての要素に代入する
(関数テンプレート)
関数の結果を範囲に保存する
(アルゴリズム関数オブジェクト)
連続する関数呼び出しの結果を範囲内のN個の要素に代入する
(関数テンプレート)
関数のN回の適用結果を保存する
(アルゴリズム関数オブジェクト)

削除操作

ヘッダーで定義 <algorithm>
特定の条件を満たす要素を削除する
(関数テンプレート)
特定の条件を満たす要素を削除する
(アルゴリズム関数オブジェクト)
特定の条件を満たす要素を除外して範囲の要素をコピーする
(関数テンプレート)
特定の条件を満たす要素を除外して範囲の要素をコピーする
(アルゴリズム関数オブジェクト)
範囲内の連続した重複要素を削除する
(関数テンプレート)
範囲内の連続した重複要素を削除する
(アルゴリズム関数オブジェクト)
連続した重複を含まない範囲のコピーを作成する
(関数テンプレート)
連続した重複を含まない範囲のコピーを作成する
(アルゴリズム関数オブジェクト)

順序変更操作

ヘッダーで定義 <algorithm>
範囲内の要素の順序を反転する
(関数テンプレート)
範囲内の要素の順序を反転する
(アルゴリズム関数オブジェクト)
反転された範囲のコピーを作成する
(関数テンプレート)
反転された範囲のコピーを作成する
(アルゴリズム関数オブジェクト)
範囲内の要素の順序を回転する
(関数テンプレート)
範囲内の要素の順序を回転する
(アルゴリズム関数オブジェクト)
要素の範囲をコピーして回転する
(関数テンプレート)
要素の範囲をコピーして回転する
(アルゴリズム関数オブジェクト)
範囲内の要素をシフトする
(関数テンプレート)
範囲内の要素をシフトする
(アルゴリズム関数オブジェクト)
(C++17まで) (C++11)
範囲内の要素をランダムに並べ替える
(関数テンプレート)
範囲内の要素をランダムに並べ替える
(アルゴリズム関数オブジェクト)

サンプリング操作

ヘッダーで定義 <algorithm>
(C++17)
シーケンスからN個のランダムな要素を選択
(関数テンプレート)
シーケンスから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 ) ) ,
std:: invoke ( proj, * iter ) ) )
[1] false であることをいう。

シーケンスがコンパレータ 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. 1.0 1.1 1.2 1.3 1.4 iter + n は単に「 iter n 回インクリメントされた結果」を意味し、 iter がランダムアクセスイテレータであるかどうかに関わらず適用されます。

パーティショニング操作

定義済みヘッダ <algorithm>
指定された述語で範囲が分割されているかどうかを判定する
(関数テンプレート)
指定された述語で範囲が分割されているかどうかを判定する
(アルゴリズム関数オブジェクト)
要素の範囲を2つのグループに分割する
(関数テンプレート)
要素の範囲を2つのグループに分割する
(アルゴリズム関数オブジェクト)
要素を2つのグループに分割して範囲をコピーする
(関数テンプレート)
要素を2つのグループに分割して範囲をコピーする
(アルゴリズム関数オブジェクト)
要素の相対的な順序を保持しながら2つのグループに分割する
(関数テンプレート)
要素の相対的な順序を保持しながら2つのグループに分割する
(アルゴリズム関数オブジェクト)
分割された範囲の分割点を特定する
(関数テンプレート)
分割された範囲の分割点を特定する
(アルゴリズム関数オブジェクト)

ソート操作

ヘッダーで定義 <algorithm>
範囲を昇順にソートする
(関数テンプレート)
範囲を昇順にソートする
(アルゴリズム関数オブジェクト)
等しい要素間の順序を保ちながら範囲をソートする
(関数テンプレート)
等しい要素間の順序を保ちながら範囲をソートする
(アルゴリズム関数オブジェクト)
範囲の最初のN個の要素をソートする
(関数テンプレート)
範囲の最初のN個の要素をソートする
(アルゴリズム関数オブジェクト)
範囲の要素をコピーして部分的にソートする
(関数テンプレート)
範囲の要素をコピーして部分的にソートする
(アルゴリズム関数オブジェクト)
(C++11)
範囲が昇順にソートされているかどうかをチェックする
(関数テンプレート)
範囲が昇順にソートされているかどうかをチェックする
(アルゴリズム関数オブジェクト)
最大のソート済み部分範囲を見つける
(関数テンプレート)
最大のソート済み部分範囲を見つける
(アルゴリズム関数オブジェクト)
指定された要素で分割されることを保証しながら範囲を部分的にソートする
(関数テンプレート)
指定された要素で分割されることを保証しながら範囲を部分的にソートする
(アルゴリズム関数オブジェクト)

二分探索操作(分割済み範囲に対する)

定義済みヘッダー <algorithm>
指定された値より 小さくない 最初の要素へのイテレータを返す
(関数テンプレート)
指定された値より 小さくない 最初の要素へのイテレータを返す
(アルゴリズム関数オブジェクト)
指定された値より 大きい 最初の要素へのイテレータを返す
(関数テンプレート)
指定された値より 大きい 最初の要素へのイテレータを返す
(アルゴリズム関数オブジェクト)
特定のキーに一致する要素の範囲を返す
(関数テンプレート)
特定のキーに一致する要素の範囲を返す
(アルゴリズム関数オブジェクト)
要素が半順序範囲内に存在するかどうかを判定する
(関数テンプレート)
要素が半順序範囲内に存在するかどうかを判定する
(アルゴリズム関数オブジェクト)

集合演算 (ソート済み範囲に対する)

定義済みヘッダ <algorithm>
一方のシーケンスが他方の部分シーケンスである場合に true を返す
(関数テンプレート)
一方のシーケンスが他方の部分シーケンスである場合に true を返す
(アルゴリズム関数オブジェクト)
二つの集合の和集合を計算する
(関数テンプレート)
二つの集合の和集合を計算する
(アルゴリズム関数オブジェクト)
二つの集合の積集合を計算する
(関数テンプレート)
二つの集合の積集合を計算する
(アルゴリズム関数オブジェクト)
二つの集合の差集合を計算する
(関数テンプレート)
二つの集合の差集合を計算する
(アルゴリズム関数オブジェクト)
二つの集合の対称差を計算する
(関数テンプレート)
二つの集合の対称差を計算する
(アルゴリズム関数オブジェクト)

マージ操作(ソート済み範囲に対する)

定義済みヘッダー <algorithm>
2つのソート済み範囲をマージする
(関数テンプレート)
2つのソート済み範囲をマージする
(アルゴリズム関数オブジェクト)
2つの順序付けられた範囲をインプレースでマージする
(関数テンプレート)
2つの順序付けられた範囲をインプレースでマージする
(アルゴリズム関数オブジェクト)

ヒープ操作

ランダムアクセス range [ first , last ) は、すべての整数 i ( 0 , last - first ) の範囲にあるとき、 bool ( comp ( first [ ( i - 1 ) / 2 ] , first [ i ] ) ) false である場合、コンパレータ comp に関する ヒープ です。

(C++20以前)

ランダムアクセス range [ first , last ) は、コンパレータ comp と射影 proj に対して、すべての整数 i ( 0 , last - first ) の範囲にあるとき、 bool ( std:: invoke ( comp, std:: invoke ( proj, first [ ( i - 1 ) / 2 ] ) ,
std:: invoke ( proj, first [ i ] ) )
false である場合、 comp proj に関する ヒープ です。

ランダムアクセス range [ first , last ) は、その範囲が comp std:: identity { } (恒等射影)に関するヒープである場合、コンパレータ comp に関する ヒープ です。

(C++20以降)

ヒープは std::make_heap および ranges::make_heap (C++20以降) によって作成できます。

ヒープのさらなる特性については、 max heap を参照してください。


ヘッダーで定義 <algorithm>
最大ヒープに要素を追加する
(関数テンプレート)
最大ヒープに要素を追加する
(アルゴリズム関数オブジェクト)
最大ヒープから最大要素を削除する
(関数テンプレート)
最大ヒープから最大要素を削除する
(アルゴリズム関数オブジェクト)
要素の範囲から最大ヒープを作成する
(関数テンプレート)
要素の範囲から最大ヒープを作成する
(アルゴリズム関数オブジェクト)
最大ヒープを昇順にソートされた要素範囲に変換する
(関数テンプレート)
最大ヒープを昇順にソートされた要素範囲に変換する
(アルゴリズム関数オブジェクト)
(C++11)
指定された範囲が最大ヒープかどうかをチェックする
(関数テンプレート)
指定された範囲が最大ヒープかどうかをチェックする
(アルゴリズム関数オブジェクト)
最大ヒープである最大の部分範囲を見つける
(関数テンプレート)
最大ヒープである最大の部分範囲を見つける
(アルゴリズム関数オブジェクト)

最小値/最大値演算

ヘッダーで定義 <algorithm>
指定された値のうち大きい方を返す
(関数テンプレート)
指定された値のうち大きい方を返す
(アルゴリズム関数オブジェクト)
範囲内の最大要素を返す
(関数テンプレート)
範囲内の最大要素を返す
(アルゴリズム関数オブジェクト)
指定された値のうち小さい方を返す
(関数テンプレート)
指定された値のうち小さい方を返す
(アルゴリズム関数オブジェクト)
範囲内の最小要素を返す
(関数テンプレート)
範囲内の最小要素を返す
(アルゴリズム関数オブジェクト)
(C++11)
2つの要素の小さい方と大きい方を返す
(関数テンプレート)
2つの要素の小さい方と大きい方を返す
(アルゴリズム関数オブジェクト)
範囲内の最小要素と最大要素を返す
(関数テンプレート)
範囲内の最小要素と最大要素を返す
(アルゴリズム関数オブジェクト)
(C++17)
値を境界値のペアの間にクランプする
(関数テンプレート)
値を境界値のペアの間にクランプする
(アルゴリズム関数オブジェクト)

辞書式比較演算

ヘッダーで定義 <algorithm>
一方の範囲が他方よりも辞書順で小さい場合に true を返す
(関数テンプレート)
一方の範囲が他方よりも辞書順で小さい場合に true を返す
(アルゴリズム関数オブジェクト)
三方比較を使用して二つの範囲を比較する
(関数テンプレート)

順列操作

ヘッダーで定義 <algorithm>
要素の範囲の次に大きい辞書順の順列を生成する
(関数テンプレート)
要素の範囲の次に大きい辞書順の順列を生成する
(アルゴリズム関数オブジェクト)
要素の範囲の次に小さい辞書順の順列を生成する
(関数テンプレート)
要素の範囲の次に小さい辞書順の順列を生成する
(アルゴリズム関数オブジェクト)
あるシーケンスが別のシーケンスの順列であるかどうかを判定する
(関数テンプレート)
あるシーケンスが別のシーケンスの順列であるかどうかを判定する
(アルゴリズム関数オブジェクト)

数値演算

ヘッダーで定義 <numeric>
(C++11)
範囲を開始値からの連続的な増分値で埋める
(関数テンプレート)
範囲を開始値からの連続的な増分値で埋める
(アルゴリズム関数オブジェクト)
要素の範囲を合計または畳み込む
(関数テンプレート)
2つの要素範囲の内積を計算する
(関数テンプレート)
範囲内の隣接する要素間の差分を計算する
(関数テンプレート)
要素範囲の部分和を計算する
(関数テンプレート)
(C++17)
std::accumulate と類似するが、順序不同
(関数テンプレート)
std::partial_sum と類似するが、 i 番目の 入力要素を i 番目の 和から除外する
(関数テンプレート)
std::partial_sum と類似するが、 i 番目の 入力要素を i 番目の 和に含める
(関数テンプレート)
呼び出し可能オブジェクトを適用した後、順序不同で縮約する
(関数テンプレート)
呼び出し可能オブジェクトを適用した後、排他的スキャンを計算する
(関数テンプレート)
呼び出し可能オブジェクトを適用した後、包括的スキャンを計算する
(関数テンプレート)

未初期化メモリに対する操作

ヘッダーで定義 <memory>
オブジェクトの範囲を未初期化メモリ領域にコピーする
(関数テンプレート)
オブジェクトの範囲を未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
未初期化メモリ領域に指定数のオブジェクトをコピーする
(関数テンプレート)
指定された数のオブジェクトを未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
範囲で定義された未初期化メモリ領域にオブジェクトをコピーする
(関数テンプレート)
オブジェクトを範囲で定義された未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
オブジェクトを開始位置とカウントで定義される未初期化メモリ領域にコピーする
(関数テンプレート)
オブジェクトを開始点とカウントで定義される未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
オブジェクトの範囲を未初期化メモリ領域にムーブする
(関数テンプレート)
オブジェクトの範囲を未初期化メモリ領域にムーブする
(アルゴリズム関数オブジェクト)
指定された数のオブジェクトを未初期化メモリ領域へ移動する
(関数テンプレート)
指定された数のオブジェクトを未初期化メモリ領域にムーブする
(アルゴリズム関数オブジェクト)
未初期化メモリ領域内の範囲で定義されたオブジェクトを デフォルト初期化 によって構築する
(関数テンプレート)
未初期化メモリ領域内の範囲でオブジェクトを デフォルト初期化 によって構築する
(アルゴリズム関数オブジェクト)
開始位置とカウントで定義される未初期化メモリ領域内のオブジェクトを デフォルト初期化 によって構築する
(関数テンプレート)
開始位置と要素数で定義される未初期化メモリ領域内のオブジェクトを デフォルト初期化 によって構築する
(アルゴリズム関数オブジェクト)
未初期化のメモリ領域内の範囲で、 value-initialization によってオブジェクトを構築する
(関数テンプレート)
未初期化メモリ領域内のオブジェクトを value-initialization によって構築する(範囲で定義)
(アルゴリズム関数オブジェクト)
未初期化メモリ領域で、開始位置とカウントで定義されたオブジェクトを value-initialization によって構築する
(関数テンプレート)
未初期化メモリ領域内の開始位置と要素数で定義される範囲に、 value-initialization によってオブジェクトを構築する
(アルゴリズム関数オブジェクト)
(C++17)
オブジェクトの範囲を破棄する
(関数テンプレート)
オブジェクトの範囲を破棄する
(アルゴリズム関数オブジェクト)
(C++17)
範囲内の複数のオブジェクトを破棄する
(関数テンプレート)
範囲内の指定された数のオブジェクトを破棄する
(アルゴリズム関数オブジェクト)
(C++17)
指定されたアドレスのオブジェクトを破棄する
(関数テンプレート)
指定されたアドレスのオブジェクトを破棄する
(アルゴリズム関数オブジェクト)
指定されたアドレスにオブジェクトを作成する
(関数テンプレート)
指定されたアドレスにオブジェクトを作成する
(アルゴリズム関数オブジェクト)

乱数生成 (C++26以降)

定義済みヘッダー <random>
範囲を一様ランダムビット生成器からの乱数で埋める
(アルゴリズム関数オブジェクト)

注記

機能テスト マクロ 標準 機能
__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 アルゴリズム