文章目录
排序算法
sort
- 默认升序
- sort(v.begin(), v.end(), greater<int>()) 降序排列
random_shuffle 洗牌
- 如果希望每次打乱的结果不一样, 需要加一个随机数种子
#include <ctime>
void test01()
{
srand((unsigned int)time(NULL));
random_shuffle(v.begin(), v.end());
}
merge 合并
- 两个原容器需要同序
- 新容器不能为0
void test14()
{
vector<int> v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
vector<int> v2 = v1;
vector<int> v3;
v3.resize(v1.size() * 2);
for_each(v1.begin(), v1.end(), my_print2());
cout<<endl;
for_each(v2.begin(), v2.end(), my_print2());
cout<<endl;
merge(v1.begin(), v1.end(), v2.begin(),v2.end(),v3.begin());
for_each(v3.begin(), v3.end(), my_print2());
cout<<endl;
}
reverse 反转
拷贝和替换
copy 拷贝
replace 替换
- 会替换所有oldvalue, 而不只是第一个
replace_if 按条件替换
swap 交换
- 两个容器需要同类型
算数生成算法
accumulate 累计求和
需要#include<numeric\>
fill 填充
常用集合算法
set_intersection 取交集
- 返回新容器中元素的结束迭代器
遍历时需要用返回的元素结束迭代器
, 而不是直接用新容器的迭代器- 求交集的两个集合也必须是
同序序列
.
set_union 取并集
set_difference 取差集
- v1和v2的差集 : v1中不属于v2的部分
- v2和v1的差集 : v2中不属于v1的部分
- 自己实现的话(v1和v2的差集)
- 两个指针, 只有当v1中的元素<v2中的元素时, 才把v1的元素放入目标容器. 然后v1的指针++. 直到>=v2的元素
- 当v1的元素大大于v2的元素时, v2的指针++, 因为不知道后面有没有和v1元素相同的.