記事ディレクトリ
1. STLライブラリのアルゴリズムの種類と紹介
1. 非変更アルゴリズム: 操作対象のコンテナの内容を直接変更しないアルゴリズム。
2. 変更アルゴリズム: 操作対象のコンテナの内容を変更できるアルゴリズム。
3. ソート検索アルゴリズム: シーケンスのソートとマージのためのアルゴリズム、検索アルゴリズム、および順序付けされたシーケンスに対する集合演算が含まれます。
4. 数値アルゴリズム: コンテナ内部の数値計算を実行します。
アルゴリズムの実装には、主に次のヘッダー ファイルが含まれます: アルゴリズム、数値、関数。同時に、アルゴリズムの実装は主に反復子に依存します。
2. STLライブラリの各アルゴリズムの主な動作
1. アルゴリズムを変更していない場合
これには主に、繰り返し数の検索、検索、サブシーケンスの最後の位置の検索、foreach トラバーサル、および隣接する繰り返し要素の検索が含まれます。
実装コードは次のとおりです。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int func(int i)
{
cout<<i<<" ";
}
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(3);
a.push_back(4);
a.push_back(7);
//1.查找重复个数
int num = count(a.begin(),a.end(),3);
cout<<num<<endl;
//2.查找
vector<int>::iterator it = find(a.begin(),a.end(),3);
cout<<*it<<endl;
//3.查找子序列最后出现的位置
vector<int> b;
b.push_back(3);
b.push_back(4);
vector<int>::iterator it1 = find_end(a.begin(),a.end(),b.begin(),b.end());
cout<<*it1<<endl;
//4.foreach 遍历
for_each(a.begin(),a.end(),func);
cout<<endl;
//5.搜索相邻的重复元素
vector<int>::iterator it2 = adjacent_find(a.begin(),a.end());
cout<<(*it2)++<<" ";
cout<<*it2<<endl;
return 0;
}
2. 補正アルゴリズム
主に、塗りつぶし、指定されたアクションによる塗りつぶし、シャッフル、要素の順序の反転、分割が含まれます。
コードは次のように実装されます。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int func(int i)
{
cout<<i<<" ";
}
int fun1()
{
return 100;
}
int fun2(int i)
{
return i<=2;
}
int main()
{
vector<int> a(10);
//1.填充
fill(a.begin(),a.end(),10);
for_each(a.begin(),a.end(),func);
cout<<endl;
//2.以指定动作填充
generate(a.begin(),a.end(),fun1);
for_each(a.begin(),a.end(),func);
cout<<endl;
//3.洗牌(混淆)
vector<int> b;
b.push_back(1);
b.push_back(2);
b.push_back(3);
b.push_back(4);
b.push_back(5);
random_shuffle(b.begin(),b.end());
for_each(b.begin(),b.end(),func);
cout<<endl;
//4.颠倒元素次序
reverse(b.begin(),b.end());
for_each(b.begin(),b.end(),func);
cout<<endl;
//5.分割
vector<int>::iterator it = partition(b.begin(),b.end(),fun2);
while(it!=b.end())
{
cout<<*it++<<" ";
}
return 0;
}
3. ソート検索アルゴリズム
これには主に、並べ替え、最大値の検索、最大値が存在する要素の検索、および検索が含まれます。
コードは次のように実装されます。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int func(int i)
{
cout<<i<<" ";
}
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(3);
a.push_back(3);
a.push_back(9);
a.push_back(6);
a.push_back(8);
a.push_back(4);
//1.排序
cout<<"排序前:"<<endl;
for_each(a.begin(),a.end(),func);
cout<<endl;
cout<<"排序后:"<<endl;
sort(a.begin(),a.end());
for_each(a.begin(),a.end(),func);
cout<<endl;
//2.最大值
int m = max(1,3);
cout<<m<<endl;
//3.最大值所在元素
vector<int>::iterator it = max_element(a.begin(),a.end());
cout<<*it<<endl;
//4.查找
bool b = binary_search(a.begin(),a.end(),4);
cout<<b<<endl;
return 0;
}
4. 数値アルゴリズム
主に要素累積、累積和、内積、部分和が含まれます。
コードは次のように実装されます。
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
int main()
{
//1.元素累加
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
//2.累加求和(元素累加,再加上最后的初始值)
int result = accumulate(a.begin(),a.end(),0);
cout<<result<<endl;
//3.内积(对应元素乘积,再加上最后的初始元素)
vector<int> b;
b.push_back(1);
b.push_back(1);
b.push_back(1);
result = inner_product(a.begin(),a.end(),b.begin(),0);
cout<<result<<endl;
vector<int> c(3);
/*4.部分求和(把原始的第一个元素赋值给第一个元素)
第二个和第一个和赋值给第二个
第三个和第二个和赋值给第三个
*/
partial_sum(a.begin(),a.end(),c.begin());
cout<<c.at(0)<<endl;
return 0;
}
要約する
上記は、C++ STL ライブラリのアルゴリズムとその主な操作の全内容です。アルゴリズムはイテレータに基づいているため、イテレータを学習することは非常に重要です。