概述
- STL常用算法主要分布在<algorithm>,<functional>和<numeric>中
- <algorithm>定义了比较、交换、查找、遍历、复制、修改等操作。
- <numeric>定义了简单数学运算的模板函数。
- <functional>定义了模板类,用以声明函数对象。
常用算法
1. accumulate
计算区间内 容器元素累计总和。
vector<int> v = { 1, 3, 5, 7, 9 };
int sum = accumulate(v.begin(),v.end(), 0); //初始值为0
2. fill
向容器中填充指定的元素。
vector<int> v = { 1, 3, 5, 7, 9 };
fill(v.begin(), v.end(), 100); //所有元素修改为100
3. set_intersection
求两个集合的交集。注:两个集合必须是有序序列。
vector<int> v1 = { 1, 3, 5, 7, 9 };
vector<int> v2 = { 2, 4, 6, 8, 9 };
vector<int> target;
target.resize(min(v1.size(), v2.size())); //分配空间,iterEnd是结束位置
auto iterEnd = set_intersection(v1.begin(),v1.end(), v2.begin(), v2.end(), target.begin());
4. set_union
求两个集合的并集。注:两个集合必须是有序序列。
vector<int> v1 = { 1, 3, 5, 7, 9 };
vector<int> v2 = { 2, 4, 6, 8, 9 };
vector<int> target;
target.resize(v1.size() + v2.size()); //分配空间,iterEnd是结束位置
auto iterEnd = set_union(v1.begin(),v1.end(), v2.begin(), v2.end(), target.begin());
5. set_difference
求两个集合的差集。注:两个集合必须是有序序列。
vector<int> v1 = { 1, 3, 5, 7, 9 };
vector<int> v2 = { 2, 4, 6, 8, 9 };
vector<int> target;
target.resize(max(v1.size(),v2.size())); //分配空间,iterEnd是结束位置
auto iterEnd = set_difference(v1.begin(),v1.end(), v2.begin(), v2.end(), target.begin());