C++ STL常用算法
算法主要头文件:
<algorithm> 体积最大,涉及比较,交换,查找,遍历操作,复制,修改等
<numeric> 体积小,简单数据运算模板函数
<functional> 定义模板类,声明函数对象
常用遍历算法
for_each( iterator beg,iterator end,_func ) //遍历容器
transform( iterator beg1,iterator end1,iterator beg2,_func ) //搬运容器到另一个容器中
#include<algorithm>
#include<vector>
class ToDo
{
public:
int operator(int v)
{
return v;
}
}
toDo(){}
int main()
{
vector<int> v;
for(int i=0;i<10;i+)
v.push_back(i);
//for_each遍历
for_each(v.begin(),v.end(),toDo);
//for_each(v.begin(),v.end(),ToDo()); //ToDo为仿函数
//transform搬运
vector<int> vTarget; //目标容器
vTarget.resize(v.size()); //提前开辟空间
transform(v.begin(),v.end(),vTarget.begin);
//transform(v.begin(),v.end(),vTarget.begin,ToDo()); //ToDo为仿函数(逻辑运算)
system("pause");
return 0;
}
常用查找算法
find( iterator beg,iterator end,value ) //查找元素(返回 迭代器)找到一个即停止
find_if( terator beg,iterator end,_Pred ) //按条件查找元素(返回 迭代器)找到一个即停止
adjacent_find( terator beg,iterator end ) //查找相邻重复元素(返回 [第一位置]迭代器)
binary_search(terator beg,iterator end,value ) //二分查找法 (仅有序序列,返回 bool)
count( terator beg,iterator end ) //统计某元素个数(返回 个数)
count_if( terator beg,iterator end,_Pred ) //按照条件统计元素个数
#include <vertor>
#include <algorithm>
class GreaterFive
{
public:
bool operator(int val)
{
return val > 5;
}
}
int main()
{
vertor<int> v;
for(int i=0;i<10;i++)
v.push_back(i);
//find()
vertor<int>:: it1 = find(v.begin,v.end(),5);
if(it == v.end()){} //未找到
//find_if()
vertor<int>:: it2 = find_if(v.begin,v.end(),GreaterFive()); //greater()内仿函数
if(it == v.end()){} //未找到
vertor<int> v1;
v1.push_back(4);
v1.push_back(1);
v1.push_back(3); //返回位置
v1.push_back(3);
v1.push_back(2);
//adjacent_find()
vertor<int>:: it3 = adjacent_find(v1.begin,v1.end());
if(it == v.end()){} //未找到
//binary_search
bool flag = binary_search(v.begin,v.end(),5);
//count
int num1 = count(v1.begin,v1.end(),3);
//count_if
int num2 = count_if(v.begin,v.end(),GreaterFive());
system("pause");
return;
}
常用排序算法
sort( terator beg,iterator end,_Pred ) //对容器内元素排序
random_shuffic( terator beg,iterator end ) //洗牌,范围里随机调整位置
merge(terator beg1,iterator end1 ,terator beg2,iterator end2 ,iterator dest) //容器元素合并,储存到另一容器(两容器必须有序)
reverse( terator beg,iterator end ) //反转指定范围的元素
#include <vertor>
#include <algorithm>
#include <functional>
int main()
{
vertor<int> v,v2;
for(int i=0;i<10;i++)
v.push_back(i);
for(int i=10;i<30;i++)
v2.push_back(i);
//sort
sort(v.begin,v.end());
sort(v.begin,v.end(),greater<int>()); //降序
//random_shuffic
random_shuffic(v.begin,v.end());
//merge
vertor<int> newV;
newV.resize(v.size()+v2.size()); //开辟空间
merge(v.begin,v.end(),v2.begin,v2.end(),newV.begin())
//reverse
reverse(v.begin,v.end());
system("pause");
return 0;
}
上一篇: 【线代】矩阵转置性质及代码证明