C++——STL ライブラリのアルゴリズムとその主なアプリケーションの紹介


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 ライブラリのアルゴリズムとその主な操作の全内容です。アルゴリズムはイテレータに基づいているため、イテレータを学習することは非常に重要です。

おすすめ

転載: blog.csdn.net/TaloyerG/article/details/113796732