需要包含的头文件
#include<iostream>
#include<set>
#include<map>
#include<vector>
#include<string>
#include<algorithm>
#include<functional>
#include<numeric>//一些算术算法中需要
遍历算法
STL中常用的遍历算法
//for_each,transform
void show(int& n)
{
cout << n << endl;
//此外还可以在这里对n进行修改,改变容器里元素的值
}
int show1(int& n)
{
return n + 100;
}
int main()
{
vector<int> v1;
for (int i = 0; i < 10; ++i)
v1.push_back(i);
for_each(v1.begin(), v1.end(), show);
vector<int> v2;
v2.resize(v1.size());//等于v2(10)
//transform()的使用
transform(v1.begin(), v1.end(), v2.begin(), show1);//改变v1容器中的值,并把结果放入v2中
for_each(v2.begin(), v2.end(), show);
}
查找算法
STL常用的查找算法
void show(int& n)
{
cout << n << endl;
//此外还可以在这里对n进行修改,改变容器里元素的值
}
int show1(int& n)
{
return n + 100;
}
bool show3(int& n)
{
if (n > 2)
return true;
else
return false;
}
bool show4(int& n)
{
if (n > 3)
return true;
else
return false;
}
int main()
{
vector<int> v1;
for (int i = 0; i < 10; ++i)
v1.push_back(i);
//for_each(v1.begin(), v1.end(), show);
vector<int> v2;
//v2.resize(v1.size());//等于v2(10)
//transform()的使用
//transform(v1.begin(), v1.end(), v2.begin(), show1);//改变v1容器中的值,并把结果放入v2中
//for_each(v2.begin(), v2.end(), show);
v1.push_back(2);
//find()
vector<int>::iterator it1;
it1 = find(v1.begin(), v1.end(), 2);//找出容器中第一个等于2的位置
//find_if()
vector<int>::iterator it2;
it2 = find_if(v1.begin(), v2.end(), show3);//最后一个是谓词对象
//这里出现异常
//adjacent_find()
vector<int>::iterator it3;
it3 = adjacent_find(v1.begin(), v1.end());//找出容器中第一个重复的元素的迭代器
//count()
int n;
n = count(v1.begin(), v1.end(), 2);//容器中等于2的个数
//count_if()
n = count_if(v1.begin(), v1.end(), show4);//容器中元素大于3的个数
}
排序算法
int main()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(6);
v1.push_back(5);
vector<int> v2;
v2.push_back(2);
v2.push_back(4);
v2.push_back(6);
vector<int> v3;
v3.resize(v1.size() + v2.size());
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
for (int i = 0; i < 5; i++)
{
cout << v3[i] << endl;
}
sort(v1.begin(), v1.end());
for (vector<int>::iterator it=v1.begin();it!=v1.end();it++)
cout << *it << endl;
拷贝与替换
//拷贝与替换
vector<int> v4;
v4.resize(v1.size());
copy(v1.begin(), v1.end(), v4.begin());//实现拷贝
replace(v1.begin(), v1.end(), 1, 2);//将容器中的1变成2
replace_if(v1.begin(), v1.end(), bigger5, 1);//将容器中大于5的数编程1,用谓词实现
swap(v1, v2);//交换两个容器中的内容
fill(v1.begin(), v1.end(), 8);//将容器里的内容都变为8
常用的算术算法
int tmp = accumulate(v1.begin(), v1.end(), 10);//把容器中的值累加并加上一个10返回
vector<int> v5;
v5.resize(v1.size() + v2.size());
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v5.begin());//得到两个容器的并级
同样的set_intersection()得到两个容器的交集,set_diffrence()得到第一个容器中有的元素而第二个容器中没有的元素。