C++標準ライブラリでは、アルゴリズムライブラリは、イテレータで表されるコンテナやその他のシーケンスに対してアルゴリズム操作を実行するさまざまな関数を提供します。[ 1 ]
C++ 標準では、<algorithm>標準ヘッダーにまとめられたいくつかの標準アルゴリズムが提供されています。[ 2 ]少数のアルゴリズムも<numeric>ヘッダーに含まれています。すべてのアルゴリズムは名前空間にあります。C ++20 では、範囲のアルゴリズム用に名前空間を持つヘッダーがさらに導入されています。std<ranges>std::ranges
C++17では、多くのアルゴリズムがオプションで実行ポリシーを選択できる機能が提供されており、これにより実装はアルゴリズムを並列実行(スレッドやSIMD命令の使用など)することが可能になります。
ポリシータイプは4種類あり、それぞれ要素へのアクセスが互いにどのような順序で許可されるかに関する異なる意味論を示しています。
sequenced_policyこれは、アルゴリズムの実行は関数を呼び出したスレッド上で行われなければならず、要素へのアクセスは順番に実行される必要があることを示しています。これは、実行ポリシーを指定せずに関数を呼び出すことと同等です。parallel_policyこれは、アルゴリズムの実行が複数のスレッドにまたがって行われる可能性があることを示していますが、各スレッド内では要素へのアクセスは順番に行われます(つまり、要素へのアクセスは同時に行われることはありません)。parallel_unsequenced_policyこれは、アルゴリズムの実行が複数のスレッドにまたがって行われる可能性があり、要素へのアクセスは同じスレッド内で順番に行われる必要がないことを示しています。unsequenced_policyこれは、アルゴリズムの実行は関数を呼び出したスレッド上で行われる必要があることを示していますが、要素へのアクセス順序は順不同で行われる可能性があります。異なるスレッドにまたがって実行される可能性のあるポリシーを使用する場合、関数によって実行される操作がスレッドセーフであることを確認するのはユーザーの責任です。
C++20では、ヘッダーファイルで定義されているアルゴリズムのうち、イテレータのペアではなく範囲に対して動作するバージョンが追加されました。<algorithm>
範囲指定バージョンのアルゴリズム関数は、名前空間内でスコープが限定されます。これらの関数は、イテレータと番兵のペアを使用できるようにすることで基本アルゴリズムの機能を拡張し、両方のイテレータが同じ型である必要がないようにするとともに、ユーザーがイテレータを手動で抽出することなく、範囲指定ヘッダーによって提供されるオブジェクトとの相互運用性を実現します。std::ranges
指定された述語が範囲内の一定数のオブジェクトに対して真と評価されるかどうかをチェックし、真と評価されるオブジェクトの数を返します。
all_ofany_ofnone_ofcountcount_ifcontainsあるプロパティの2つの範囲を比較する
mismatchequallexicographical_comparecontains_subrangestarts_withends_withis_permutation範囲内で、後続の要素が何らかの述語を満たす最初または最後の位置を見つける
findfind_iffind_if_notfind_lastfind_last_iffind_last_if_notfind_endfind_first_ofadjacent_findsearchsearch_npartition_point範囲に対する二分探索操作を提供します。ソートされていない範囲に対してこれらの操作を使用すると、未定義の動作となります。
binary_searchupper_boundlower_boundequal_range何らかの比較述語によって定義された範囲内の最大値または最小値を検索します。
max_elementmin_elementminmax_element範囲全体が何らかの特性を満たしているかどうかをチェックします。
is_partitionedis_sortedis_heapある範囲の要素を別の範囲に転送します
copycopy_ifcopy_backwardmovemove_backwardreverse_copyrotate_copyunique_copysample範囲の要素をその場で移動し、範囲を何らかのプロパティに基づいて分割します。
uniqueremoveremove_ifpartitionpartition_copystable_partition範囲内の値をその場でソートまたは部分的にソートします。
sortpartialsortstable_sortnth_element指定された範囲に値を読み込まずにデータを入力します。
fillgenerateiota指定された範囲の各要素をその場で変換します。
for_eachtransformreplacereplace_ifclamp範囲内の要素の順序をその場で変更します
shuffleshift_leftshift_rightreverserotate最大ヒープへの要素の作成、挿入、削除を行うアルゴリズムを提供します。