目次
序文
#include <algorithm> は、C++ 標準テンプレート ライブラリ (STL) の最も重要なヘッダー ファイルの 1 つであり、反復子に基づいた多数の非メンバー テンプレート関数を提供します。
具体的には、非変更シーケンス操作、変更シーケンス操作、パーティション操作、ソート操作、二分探索操作、マージ操作、ヒープ操作、最大値および最小値操作、その他の操作が含まれます。
この記事ではライブラリ内の関数の使い方やよく使われる関数の解説を詳しく記録しています。
1. 非変更シーケンス演算 ( 12 )
1.for_each()
シーケンス内の各要素に対して操作を実行する
for_each(v1.begin(),v1.end(),add);//将v1执行add方法
2.find()
シーケンス内で最初に出現する値を検索します。基礎となる要素に対して等価演算子を使用して、範囲内の要素を入力値と比較します。一致した場合、検索を終了し、要素のInputIteratorを返します。
find(v1.begin(),v1.end(),value);//在v1中找到value的索引值
3.find_if()
述語を満たすシーケンス内の最初の要素を検索します。
4.find_end()
シーケンス内でサブシーケンスが最後に出現する位置を検索します。
5.find_first_of()
シーケンス内の指定された値のセット内で最初に出現する値を検索します
6.adjacent_find()
シーケンス内の隣接する値のペアを検索します
7.count()
シーケンス内の値の出現回数をカウントします。
count(v1.begin(),v1.end(),value);//统计v1中value出现的次数
8.count_if()
シーケンス内の述語の一致の数をカウントします
9.不一致()
比較: 2 つのシーケンスの異なる最初の要素を見つけます。
10.equal()
両方のシーケンス内の対応する要素が同じ場合は True
11.検索()
シーケンス内で最初に出現するサブシーケンスの位置を検索します。
12.search_n()
シーケンス内の値の n 回連続した出現を検索します。
2. シーケンス操作を変更する ( 27 )
1.コピー()
シーケンスの最初の要素からコピーします
copy (v1.begin(),v1.end(),v2.begin());//v1复制给v2
2.copy_backward()
シーケンスの最後の要素からコピーします
3.swap()
2 つの要素を交換する
swap(a,b);//交换ab
4.swap_ranges()
指定された範囲の要素を交換します
5.iter_swap()
イテレータが指す 2 つの要素を交換します
6.transform()
指定された範囲内の各要素に演算を適用します
transform(v1.begin(),v1.end(),v2.begin(),add);//将v1复制到v2同时先执行add方法 将其改变后放入v2容器中
7.replace()
一部の値を指定された値に置き換えます
replace(v1.begin(),v1.end(),old_value,new_value);//在v1中找old_value,并用new_value替换
8.replace_if()
述語を満たすいくつかの要素を置き換える
9.replace_copy()
シーケンスをコピーするときに要素を指定された値に置き換えます
10.replace_copy_if()
シーケンスをコピーするときに述語を満たす要素を置換する
11.fill()
すべての要素を指定された値に置き換えます
fill(v1.begin(),v1.end(),value);//遍历v1,value替换所遍历的值
12.fill_n()
最初の n 個の要素を指定された値に置き換えます
13.生成()
すべての要素を操作の結果で置き換えます
14.generate_n()
最初の n 個の要素を演算の結果に置き換えます。
15.削除()
指定された値を持つ要素を削除します
remove(v1.begin(),v1.end(),value);//删除v1中所有值为value的数据
16.remove_if()
述語を満たす要素を削除する
17.remove_copy()
シーケンスをコピーするときに、指定された値を持つ要素を削除します。
18.remove_copy_if()
シーケンスをコピーするときに述語を満たす要素を削除する
19.ユニーク()
隣接する重複要素を削除する
vector<int> ModuleArr;
sort(ModuleArr.begin(), ModuleArr.end());//排序
ModuleArr.erase(unique(ModuleArr.begin(), ModuleArr.end()), ModuleArr.end());//去重
20.unique_copy()
シーケンスをコピーするときに隣接する重複要素を削除します
21.リバース()
要素の順序を逆にする
reserve(v1.begin(),v1.end());//反转v1次序
22.reverse_copy()
シーケンスをコピーするときに要素の順序を逆にします。
23.回転()
要素を循環する
24.rotate_copy()
シーケンスをコピーするときに要素を循環する
25.ランダムシャッフル()
ランダム: 一様分布を使用して要素をランダムに移動します。
26.パーティション()
パーティション: 述語を満たすすべての要素を前に置きます
27.stable_partition()
述語を満たす要素を前に置き、元の順序を維持する
3. シーケンスのソートと関連操作 ( 27 )
1.sort()
平均効率の良い並べ替え
sort(v1.begin(), v1.end());//v1排序
2.stable_sort()
並べ替え: 同じ要素の元の順序を維持します。
3.partial_sort()
シーケンスの前の部分を並べ替える
4.partial_sort_copy()
コピー中にシーケンスの前の部分を並べ替えます
5.nth_element()
n 番目の要素 n 番目の要素をそれぞれ正しい位置に配置します
6. lower_bound()
ある値以上の最初の値を検索します。
7.upper_bound()
特定の値より大きい最初の出現箇所を検索します
8.equal_range()
指定された値を挿入できる最大範囲を (順序を壊すことなく) 検索します。
9.binary_search()
指定された要素が順序付けられたシーケンス内に存在するかどうかを判断します
10.merge()
ソートされた 2 つのシーケンスをマージする
merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());//合并v1和v2到v3
11.inplace_merge()
2 つの連続するソートされたシーケンスをマージする
12.includes()
順序付けされた構造に対する集合演算: あるシーケンスが別のシーケンスのサブシーケンスである場合は true
13.set_union()
2 つのセットの順序付けられた和集合を構築します
14.set_intersection()
2 つのセットの順序付き共通部分を構築します
15.set_difference()
2 つの集合の順序差分を構築します
16.set_metric_difference()
2 つのセットの順序対称差分 (和集合) を構築します。
17.push_heap()
要素をヒープに追加する
18.pop_heap()
ヒープから要素をポップする
19.make_heap()
シーケンスからヒープを構築します
20.sort_heap()
ヒープをソートする
21.分()
2 つの値のうち小さい方
min(a,b);
22.max()
2 つの値のうち大きい方
max(a,b);
23.min_element()
シーケンス内の最小の要素
max_element(first,end,cmp);//第三个参数cmp可写可不写,max_element()和min_element() 默认是从小到大排列
24.max_element()
シーケンス内の最大の要素
min_element(first,end,cmp)
25.lexicographical_compare()
2 つのシーケンスは辞書順に先着順です
26.next_permutation()
辞書順で次
27.prev_permutation()
辞書順に前にある
要約する
この記事では、アルゴリズム ライブラリのテンプレート関数メソッドを要約し、一般的に使用される関数メソッドの使用方法を詳しく紹介します。