<algorithm>

アルゴリズムを実行する C++ 標準ライブラリ コンテナーのテンプレート関数を定義します。

構文

(see links below for specific algorithm syntax)

Note

<algorithm> ライブラリでは、#include <initializer_list> ステートメントも使用されます。

解説

C++ 標準ライブラリ アルゴリズムは、さまざまなデータ構造で動作できます。 操作できるデータ構造には、特定のアルゴリズムの要件を満たしている限り、C++ 標準ライブラリのコンテナー クラス vectorlist(たとえば、ユーザー定義のデータ構造と要素の配列) が含まれます。 C++ 標準ライブラリ アルゴリズムは、反復子によって間接的にコンテナー要素にアクセスし、走査することによって、このレベルの一般性を実現します。

C++ 標準ライブラリ アルゴリズムは、通常、開始位置または終了位置によって指定される反復子範囲を処理します。 参照される範囲は、範囲内のすべての反復子が逆参照可能でなければならないという意味で有効である必要があります。また、各範囲のシーケンス内では、反復子をインクリメントすることによって、最初の位置から最後の位置に到達できる必要があります。

C++20 以降では、定義 <algorithm> されているほとんどのアルゴリズムは range、 たとえば、呼び出しではなく、次の呼び出 sort(v1.begin(), v1.end(), greater<int>());しを行うことができます。 ranges::sort(v1, greater<int>());

C++ 標準ライブラリ アルゴリズムは、さまざまな種類のコンテナー オブジェクトを同時に操作できます。 アルゴリズムの目的に関する情報を伝えるために、次の 2 つのサフィックスが使用されています。

  • サフィックスは _if 、要素自体ではなく、要素の値を操作する関数オブジェクトでアルゴリズムが使用されることを示します。 たとえば、アルゴリズムは find_if 、関数オブジェクトで指定された条件を満たす値を持つ要素を検索しますが、アルゴリズムは特定の find 値を検索します。

  • サフィックスは _copy 、アルゴリズムが通常、変更された値をコピーするのではなく、コピーされた値を変更することを示します。 つまり、ソース範囲の要素は変更せず、結果を出力範囲/反復子に配置します。 たとえば、アルゴリズムは reverse 範囲内の要素の順序を逆にし、逆の結果を reverse_copy コピー先の範囲にコピーします。

C++ 標準ライブラリ アルゴリズムは、多くの場合、目的または要件を示すためにグループに分類されます。 これには、要素の値を変更する変更アルゴリズムと、変更されない非変更アルゴリズムの比較が含まれます。 変換アルゴリズムは、要素の順序を変更しますが、要素の値は変更しません。 削除アルゴリズムは、範囲または範囲のコピーから要素を除去できます。 並べ替えアルゴリズムは、さまざまな方法で要素の順序を変更し、並べ替えられた範囲アルゴリズムは、要素が特定の方法で並べ替えられた範囲に対してのみ機能します。

数値処理用に提供される C++ 標準ライブラリ数値アルゴリズムには独自のヘッダー ファイル <numeric>があり、関数オブジェクトとアダプターはヘッダーで定義されています <functional>。 ブール値を返す関数オブジェクトは述語と呼ばれます。 既定の二項述語は比較 operator< です。 一般に、並べ替えられる要素は、2 つの要素を考えると、同等 (どちらも他の要素より小さいという意味) か、一方が他方より小さいかを判断できるように、比較対象の要素よりも小さい必要があります。 この結果、等価でない複数の要素間で順序が付けられます。

アルゴリズム

名前 説明
adjacent_find 等しいか、または指定された条件を満たす 2 個の隣接する要素を検索します。
all_of 特定の範囲内の各要素について条件が存在するときに、true を返します。
any_of 指定された要素の範囲内で条件が少なくとも 1 回存在するときに、true を返します。
binary_search 並べ替えられた範囲に、指定された値と等しい要素が存在するか、または二項述語で指定された意味で、指定された値と等価の要素が存在するかどうかをテストします。
clamp
copy 要素のソース シーケンス全体を繰り返し、順方向の新しい位置を割り当てて、ソース範囲内からターゲットの範囲に要素の値を割り当てます。
copy_backward 要素のソース シーケンス全体を繰り返し、逆方向の新しい位置を割り当てて、ソース範囲内からターゲットの範囲に要素の値を割り当てます。
copy_if 特定の範囲内で指定された条件が true であるすべての要素をコピーします。
copy_n 指定された数の要素をコピーします。
count 範囲内で値が指定された値と一致する要素の数を返します。
count_if 範囲内で値が指定された条件と一致する要素の数を返します。
equal 二項述語によって指定された等値または等価について、2 つの範囲を要素ごとに比較します。
equal_range 順序付けられた範囲内で、最初の位置が指定された要素の位置以下で、2 番目の位置が要素の位置を超える位置のペアを検索します。ここで、シーケンス内の位置を確立するために使用される等価または順序付けの意味は、二項述語によって指定できます。
fill 指定された範囲のすべての要素に同じ新しい値を割り当てます。
fill_n 特定の要素で始まる要素範囲で、指定された数の要素に新しい値を割り当てます。
find 範囲内で指定された値を持つ要素が最初に出現する位置を検索します。
find_end 範囲内で指定されたシーケンスと等しい、つまり二項述語で指定された意味で等価である最後のサブシーケンスを検索します。
find_first_of 対象範囲内で複数の値のうち最初に出現するもの、つまり二項述語で指定された意味で、指定された要素のセットと等価である複数の要素のうち最初に出現するものを検索します。
find_if 範囲内で指定された条件を満たす要素が最初に出現する位置を検索します。
find_if_not 条件を満たさない指定範囲の最初の要素を返します。
for_each 範囲内で順方向順序で各要素に対して指定された関数を適用し、関数オブジェクトを返します。
for_each_n
generate 範囲内の各要素に関数オブジェクトによって生成される値を割り当てます。
generate_n 範囲内の指定された数の要素に関数オブジェクトによって生成される値を割り当て、最後に割り当てられた値を 1 つ超えた位置を返します。
includes 1 つの並べ替えられた範囲に、別の並べ替えられた範囲内のすべての要素が含まれるかどうかをテストします。要素間の順序または等価の基準は二項述語によって指定できます。
inplace_merge 2 つの連続する並べ替えられた範囲の要素を単一の並べ替えられた範囲として連結します。順序の基準は二項述語によって指定できます。
is_heap 指定された範囲の要素がヒープを形成する場合は true を返します。
is_heap_until 指定された範囲が最後の要素までヒープを形成する場合は true を返します。
is_partitioned 特定の範囲で条件が true になるすべての要素が、true になる要素の前にある場合は、false を返します。
is_permutation 特定の範囲の要素が有効な順列を形成するかどうかを決定します。
is_sorted 指定された範囲の要素が並べ替えられた順序になっている場合は true を返します。
is_sorted_until 指定された範囲の要素が並べ替えられた順序になっている場合は true を返します。
iter_swap 指定された反復子のペアで参照される 2 個の値を交換します。
lexicographical_compare 2 つのシーケンスを要素ごとに比較して、2 つのうちどちらが小さいかを判断します。
lower_bound 順序の基準が二項述語で指定できる場合に、順序付けられた範囲内で、指定した値と等価以上の値を持つ最初の要素の位置を検索します。
make_heap 指定された範囲の要素を、最初の要素が最大であるヒープに変換します。並べ替えの基準は二項述語によって指定できます。
max 2 つのオブジェクトを比較し、大きい方のオブジェクトを返します。順序の基準は、二項述語によって指定できます。
max_element 並べ替え基準をバイナリ述語で指定できる、指定された範囲内の最大の要素の最初の出現箇所を検索します。
merge 2 つの並べ替えられたソース範囲のすべての要素を単一の並べ替えられたターゲット範囲として連結します。順序の基準は二項述語によって指定できます。
min 2 つのオブジェクトを比較し、小さい方のオブジェクトを返します。順序の基準は、二項述語によって指定できます。
min_element 指定された範囲内の最小の要素の最初の出現箇所を検索します。順序の基準は二項述語によって指定できます。
minmax 2 つの入力パラメーターを比較し、それらを昇順のペアとして返します。
minmax_element min_elementmax_element によって実行される作業を 1 回の呼び出しで実行します。
mismatch 二項述語によって指定された等値または等価について、2 つの範囲を要素ごとに比較し、相違点が発生する最初の位置を検索します。
<alg> move 指定された範囲に関連付けられている要素を移動します。
move_backward ある反復子の要素を別の反復子に移動します。 移動は、指定した範囲の最後の要素から開始され、その範囲内の先頭の要素で終了します。
next_permutation 範囲内の要素の順序を変更し、元の順序を辞書式に次に大きい順列 (存在する場合) に置き換えます。next の意味は二項述語によって指定できます。
none_of 特定の範囲内の要素について条件が存在しないときに、true を返します。
nth_element 範囲内のシーケンスの n 番目の要素を正しく検索し、その要素の前にあるすべての要素がその要素以下、シーケンス内でその要素に続くすべての要素がその要素以上になるようにして、要素の範囲を分割します。
partial_sort 範囲内で指定された数の、より小さい要素を、降順以外の順序、または二項述語で指定された順序の基準に従って配置します。
partial_sort_copy ソース範囲からターゲット範囲に要素をコピーします。ソース要素は小なりまたは指定された別の二項述語によって並べ替えられます。
partition 範囲内の要素を 2 つの分離されたセットに分類し、単項述語を満たす要素が単項述語を満たさない要素よりも前に来るように配置します。
partition_copy 条件が true である要素を 1 つターゲットにコピーし、条件が false である要素を別のターゲットにコピーします。 要素は指定された範囲に含まれている必要があります。
partition_point 条件を満たさない、指定された範囲内の最初の要素を返します。 要素は、条件を満たす要素が、満たされていない要素の前に来るように並べ替えられます。
pop_heap ヒープの先頭と範囲内の最後から 2 番目の位置との間で最大の要素を削除し、残りの要素から新しいヒープを形成します。
prev_permutation 範囲内の要素の順序を変更し、元の順序を辞書式に次に大きい順列 (存在する場合) に置き換えます。next の意味は二項述語によって指定できます。
push_heap 範囲の末尾にある要素を、範囲内の以前の要素で構成される既存のヒープに追加します。
random_shuffle 範囲内の N 個の要素のシーケンスを、ランダムに選択された N! 個の可能な配置の 1 つに再配置します。
remove 特定の範囲から指定された値を除去します。残りの要素の順序に影響を及ぼすことはなく、指定された値を含まない新しい範囲の末尾を返します。
remove_copy 指定した値の要素がコピーされない点を除き、ソース範囲からコピー先の範囲に要素をコピーします。ただし、再メイン要素の順序を乱し、新しいコピー先範囲の末尾を返す必要はありません。
remove_copy_if 述語を満たす要素がコピーされない点を除き、ソース範囲からコピー先の範囲に要素をコピーします。ただし、再メイン要素の順序を乱し、新しい変換先範囲の末尾を返す必要はありません。
remove_if 特定の範囲から述語を満たす要素を除去します。残りの要素の順序に影響を及ぼすことはなく、指定された値を含まない新しい範囲の末尾を返します。
replace 範囲内の各要素が指定された値に一致するかどうかを調べ、一致する場合は置き換えます。
replace_copy ソース範囲内の各要素が指定された値に一致するかどうかを調べ、一致する場合は置き換えて結果を新しいターゲット範囲にコピーします。
replace_copy_if ソース範囲内の各要素が指定された述語を満たすかどうかを調べ、満たす場合は置き換えて結果を新しいターゲット範囲にコピーします。
replace_if 範囲内の各要素が指定された述語を満たすかどうかを調べ、満たす場合は置き換えます。
reverse 範囲内の要素の順序を反転させます。
reverse_copy ソース範囲内の要素の順序を反転し、結果をターゲット範囲にコピーします。
rotate 2 つの隣接する範囲の要素を交換します。
rotate_copy ソース範囲内の 2 つの隣接する範囲の要素を交換し、結果をターゲット範囲にコピーします。
sample
search 要素が特定の要素シーケンス内の要素と等しいか、または要素が二項述語で指定される意味において特定のシーケンス内の要素と等価であるシーケンスが、対象範囲内で最初に出現する位置を検索します。
search_n 特定の値を持つか、二項述語によって指定される値と関連する、指定された数の要素で構成される範囲内の最初のサブシーケンスを検索します。
set_difference 1 つの並べ替えられたソース範囲内に属するが、2 番目の並べ替えられたソース範囲には属さないすべての要素を単一の並べ替えられたターゲット範囲として結合します。順序の基準は二項述語によって指定できます。
set_intersection 両方の並べ替えられたソース範囲に属するすべての要素を単一の並べ替えられたターゲット範囲として結合します。順序の基準は二項述語によって指定できます。
set_symmetric_difference 並べ替えられたソース範囲の一方には属するが、両方には属さないすべての要素を単一の並べ替えられたターゲット範囲として結合します。順序の基準は二項述語によって指定できます。
set_union 2 つの並べ替えられたソース範囲の少なくとも一方に属するすべての要素を単一の並べ替えられたターゲット範囲として結合します。順序の基準は二項述語によって指定できます。
sort 指定された範囲の要素を、降順以外の順序、または二項述語で指定された順序の基準に従って配置します。
shuffle 乱数ジェネレーターを使用して、指定の範囲の要素をシャッフル (並べ替え) します。
sort_heap ヒープを並べ替えられた範囲に変換します。
stable_partition 範囲内の要素を 2 つの分離されたセットに分類し、等価要素の相対順序は維持して、単項述語を満たす要素が単項述語を満たさない要素よりも前に来るように配置します。
stable_sort 指定された範囲の要素を、降順以外の順序、または二項述語で指定された順序の基準に従って、等価要素の相対順序を維持して配置します。
swap 2 種類のオブジェクトの間で、最初のオブジェクトの内容を 2 番目のオブジェクトに割り当て、2 番目のオブジェクトの内容を最初のオブジェクトに割り当てて、要素の値を交換します。
swap_ranges 1 つの範囲の要素を、同じサイズの別の範囲の要素と交換します。
transform 指定された関数オブジェクトをソース範囲内の各要素、または 2 つのソース範囲内の要素のペアに適用し、関数オブジェクトの戻り値をターゲット範囲にコピーします。
unique 指定した範囲内の互いに隣接する重複する要素を削除します。
unique_copy 相互に隣接する重複する要素を除き、ソース範囲からコピー先の範囲に要素をコピーします。
upper_bound 順序の基準が二項述語で指定できる場合に、順序付けられた範囲内で、指定した値を超える値を持つ最初の要素の位置を検索します。

関連項目

ヘッダー ファイル リファレンス
C++ 標準ライブラリ内のスレッド セーフ
C++ 標準ライブラリ リファレンス