C++算法与数据结构algorithm库使用指南
C++算法与数据结构algorithm库使用指南
min/max
求两元素的最小值/最大值:
min(a,b);
max(a,b);
可以使用列表作为参数,从而求出多个元素的最大值,但要保证列表中的数据类型相同
min({a,b,c,d});
max({a,b,c,d});
swap
交换两个元素的值
swap(a,b);
find/find_if
查找第一个满足指定条件(值等于指定值)的元素迭代器,若找不到则返回end
find(a.begin(),a.end(),x);
find_if(a.begin(),a.end(),判断条件);
count/count_if
计数满足指定条件(值等于指定值)元素,返回整数
count(a.begin(),a.end(),x);
count_if(a.begin(),a.end(),判断条件);
reverse
翻转指定容器的指定迭代器范围
reverse(a.begin(),a.end());
random_shuffle
随机打乱指定容器的指定迭代器范围
random_shuffle(a.begin(),a.end());
unique
将指定容器的指定迭代器范围的连续重复元素压缩成一个元素(因此一般先排序),重复的元素会被转移至容器最后,因此不改变容器大小,返回去重后容器的尾指针。
unique(a.begin(),a.end());
fill
将指定迭代器范围内的元素置为val
fill(a.begin(),a.end(),val);
特别的,一般使用0x3f3f3f3f最为最大值进行初始化,而非INT32_MAX等常量。因为使用范围极限作为最大值初始化,在进行计算后常会出现超范围的情况,而0x3f3f3f3f值足够大,但又保证运算后不容易超范围
sort/stable_sort
对指定迭代器范围内的元素进行排序/稳定排序,cmp为自定义比较函数,默认为升序
sort(a.begin(),a.end(),cmp);
stable_sort(a.begin(),a.end(),cmp);
nth_element
对指定迭代器范围内的元素进行一次快排,即将指定迭代器范围内第k小的元素处在第k个元素的位置上,左边的元素小于等于它,右边的元素大于它。
nth_element(a.begin(),a.begin()+k,a.end(),cmp);
lower_bound/upper_bound
对指定迭代器范围内的指定值进行二分查找,不同的是,lower_bound返回第一个等于或大于的元素,upper_bound返回第一个大于的元素
lower_bound(a.begin(),a.end(),x,cmp);
upper_bound(a.begin(),a.end(),x,cmp);
next_permutation/pre_permutation
将指定迭代器范围内的序列转为其下/上一个排列,返回判断是否存在下一个排列的bool常量
next_permutation(a.begin(),a.end(),cmp);
pre_permutation(a.begin(),a.end(),cmp);
特别的,当不存在下一个排列时,函数将返回false,但对容器的操作依然会进行,此时会将序列转为第一个排列,相当于循环
vector<int> v={3,2,1};
cout<<next_permutation(v.begin(),v.end())<<'\n';
for(auto i:v)
cout<<i<<" ";
输出结果如下
0
1 2 3
any_of/all_of
判断指定迭代器范围内,是否存在/全部元素满足条件,返回bool常量
any_of(a.begin(),a.end(),判断条件);
all_of(a.begin(),a.end(),判断条件);

浙公网安备 33010602011771号