C++——STL库中各算法以及其主要运用简介

文章目录

  • 一、STL库中算法的种类及简介
  • 二、STL库中各算法的主要操作
    • 1.非修正算法
    • 2.修正算法
    • 3.排序查找算法
    • 4.数值算法
  • 总结


一、STL库中算法的种类及简介

1.非修正算法 : 不直接修改其所操作的容器内容的算法。
2.修正算法 : 可以修改它们所操作的容器内容的算法。
3.排序查找算法 : 包括对序列进行排序和合并的算法,搜索算法以及有序序列上的集合操作。
4.数值算法 : 对容器内进行数值计算。

算法的实现主要包括以下头文件:algorithm , numeric , functional。同时算法的实现主要依赖于迭代器。

二、STL库中各算法的主要操作

1.非修正算法

主要包括查找重复个数、查找、查找子序列最后出现的位置、foreach遍历、搜索相邻的重复元素。
实现代码如下:

#include 
#include 
#include 

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 
#include 
#include 

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 
#include 
#include 

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 
#include 
#include 
#include 

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库中各算法及其主要操作的全部内容啦,算法是建立在迭代器的基础之上进行的,所以,学好迭代器很关键!

你可能感兴趣的:(C++,STL,算法,c++,stl,算法)