1.非修正算法 : 不直接修改其所操作的容器内容的算法。
2.修正算法 : 可以修改它们所操作的容器内容的算法。
3.排序查找算法 : 包括对序列进行排序和合并的算法,搜索算法以及有序序列上的集合操作。
4.数值算法 : 对容器内进行数值计算。
算法的实现主要包括以下头文件:algorithm , numeric , functional。同时算法的实现主要依赖于迭代器。
主要包括查找重复个数、查找、查找子序列最后出现的位置、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;
}
主要包括填充、以指定动作填充、洗牌、颠倒元素次序、分割。
代码实现如下:
#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;
}
主要包括排序、求最大值、寻找最大值所在元素、查找。
代码实现如下:
#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;
}
主要包括元素累计、累加求和、内积、部分求和。
代码实现如下:
#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库中各算法及其主要操作的全部内容啦,算法是建立在迭代器的基础之上进行的,所以,学好迭代器很关键!