max和min
max(a, b); min(a, b); max({a, b, c}); min({a, b, c});
sort
//用法
sort(begin, end);
//自定义排序
bool cmp(int x1,int x2) { return x1 < x2; }
sort(arr, arr + n, cmp);
//Lambda表达式
sort(arr, arr + n, [](int x1, int x2){ return x1 < x2; });
二分查找
binary_search
bool flag = binary_search(arr + l, arr + r, val); //查[l, r),找到结果为true,没有则为false
//binary_search利用的也是指针
lower_bound
lower_bound(arr + l, arr + r, val) //找到[l, r)第一个大于等于val的数
//返回地址,如果返回尾地址,则没找到
upper_bound
upper_bound(arr + l, arr + r, val) //找到[l, r)第一个严格大于val的数
//返回地址,如果返回尾地址,则没找到
equal_range
equal_range综合了lower_bound和upper_bound
pair<T, T> = equal_range(arr + l, arr + r, val); //返回pair类型
//等价于{lower_bound(arr + l, arr + r, val) ,upper_bound(arr + l, arr + r, val)}
copy
copy(arr1 + l, arr1 + r, arr2); //把arr1[l, r)的部分复制到arr2
copy_n
copy_n(arr1 + l, x, arr2); //把arr1[l, l + x)的部分复制到arr2
swap
swap(a, b); //交换a, b
replace
replace(arr + l, arr + r, oldV, newV); //把[l, r)区间的oldV全部替换为newV
fill
fill(arr + l, arr + r, val); //把[l, r)区间赋值为val
reverse
reverse(arr + l, arr + r); //把[l, r)区间反转
rotate
rotate(arr + l, arr + mid, arr + r); //滚动数组,arr + mid向前滚动,成为新的[l, r)区间首元素
find
find(arr + l, arr + r, val); //可用于对无序数组查找
//返回地址,如果返回尾地址,则没找到
find_end
find_end(arr1 + l, arr1 + r, arr2 + l, arr2 + r); //查询arr1中是否有子数组arr2
//返回地址,如果返回尾地址,则没找到
unique
unique的作用是“去掉”容器中相邻元素的重复元素
它实质上是一个伪去除,它会把重复的元素添加到容器末尾,而返回值是去重部分的尾地址
⚠ unique针对的是相邻元素,所以对于顺序错乱的数组成员,或者容器成员,需要先进行排序
unique(a.begin(), a.end()); //去重,将重复元素放在末尾
count
auto cnt = count(arr + l, arr + r, val); //统计[l, r)中val的个数
equal
bool flag = equal(arr1 + l, arr1 + r, arr2); //arr1的[l, r)区间是否与arr2相等
//找到结果为true,没有则为false
merge
merge(arr1, arr1 + n, arr2, arr2 + m, arr3); //将arr1,arr2有序合并为arr3,归并排序
includes
includes(arr1 + l, arr1 + r, arr2 + l, arr2 + r); //查询arr1中是否有子序列arr2
集合相关
set_union
其作用是求两个集合的并集,但是要求输入的两个集合必须是有序的
int len = set_union(arr1, arr1 + n1, arr2, arr2 + n2, arr3) - arr3;
//返回新集合大小
set_intersection
其作用是求两个集合的交集,但是要求输入的两个集合必须是有序的
int len = set_intersection(arr1, arr1 + n1, arr2, arr2 + n2, arr3) - arr3;
//返回新集合大小
set_difference
其作用是求两个集合的差(A - B),但是要求输入的两个集合必须是有序的
int len = set_difference(arr1, arr1 + n1, arr2, arr2 + n2, arr3) - arr3;
//返回新集合大小
set_symmetric_difference
其作用是求两个集合的对称差集 A △B = ( A —B )∪( B —A ) ,但是要求输入的两个集合必须是有序的
int len = set_symmetric_difference(arr1, arr1 + n1, arr2, arr2 + n2, arr3) - arr3;
//返回新集合大小
字典序函数
next_permutation
next_permutation(arr ,arr + n); //得到下个一个字典序
prev_permutation
prev_permutation(arr ,arr + n); //得到上个一个字典序

