#include <algorithm>
reverse函数 o(n)
// 翻转vector
vector<int> a{0, 1, 2, 3, 4};
reverse(a.begin(), a.end());
// 翻转普通数组
int a[] = {1, 2, 3, 4, 5}
reverse(a, a + 5);
unique函数
// 对数组或vector进行判重,前提是相同元素必须要排在一起,返回值是最后一个不同元素的下一个元素的迭代器
vector<int> a{1, 2, 3, 4, 5};
m = unique(a.begin(), a.end());
cnt = m - a.begin(); // vector中不同元素的个数
a.erase(unique(a.begin(), a.end()), a.end()); // 首先对vector进行去重,接着将后面的重复元素全部删除
random_shuffle函数
// 将一个vector进行随机打乱,每次生成一个随机种子,想要改变随机种子就将当前时间传入作为随机种子
vevtor<int> a({1, 2, 3, 4, 5});
random_shuffle(a.begin(), a,end());
#include <ctime>
srand(time(0));
sort函数
// 将一个数组或vector进行排序
vector<int> a{1, 2, 3, 4, 5};
sort(a.begin(), a.end()); // 默认从小到大排序
sort(a.begin(), a.end(), greater<int>); // 从大到小排序
// sort()也可以对结构体进行排序,只用加上cmp比较函数或者在结构体中重载小于号即可
lower_bound和upper_bound函数
// 需要数组或vector从小到大排好序才能够使用
vector<int> a{1, 2, 3, 4, 5};
int t = lower_bound(a.begin(), a.end(), 3) - a.begin(); // 返回第一个大于等于3的元素的下标
int t = upper_bound(a.begin(), a.end(), 3) - a.begin(); // 返回第一个大于3的元素的下标
next_permutation函数 o(n)
// next_permutation可以将一个数组按字典序排序为下一个比自己大的数组,如果有下一个比自己大的数组则返回true,没有则返回false
vector<int> a{1, 2, 3, 4, 5};
next_permutation(a.begin(), a.end());