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(),判断条件);

参考

c++max、min函数的作用及示例代码与详细讲解说明以及引申知识讲解

posted @ 2025-04-21 16:59  DuckingWJ  阅读(50)  评论(0)    收藏  举报