【C++STL库】algorithm头文件常用函数

本文介绍 C++ 标准模板库 (STL) 中常用函数的应用技巧,包括 max() 和 min() 函数用于获取最大值或最小值,abs() 和 fabs() 函数用于求取绝对值,swap() 函数用于交换两个变量的值,reverse() 函数用于数组或容器元素的反转,next_permutation() 函数用于获取序列的下一个排列,fill() 函数用于批量赋值,sort() 函数用于排序操作,以及 lower_bound() 和 upper_bound() 函数用于查找特定值的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用:

  • #include <algorithm>
  • using namespace std;

max(), min(), abs()

//返回最大值或最小值
max(x,y);
min(x,y);
//返回3个中最大值
max(x,max(y,z));

//返回绝对值
abs(x); //x为整数
//浮点数可以用fabs()

swap()

//交换x和y的值
int x=1,y=2;
swap(x,y); //2 1

reverse()

//将数组指针/迭代器在[it,it2)间对元素反转
int a[10];
reverse(a,a+4); //将a[0]~a[3]反转
string str;
reverse(str.begin()+2,str.begin()+6); //对于str[2]~str[5]反转

next_permutation()

//给出一个序列在全排列中的下一个序列
//例n==3的全排列为
    //123
    //132
    //213
    //231
    //312
    //321
//则231的下一个序列为312

//下面给一个例子
int a[10] = {1,2,3};
do{
    printf("%d%d%d\n",a[0],a[1],a[2]);
}while(next_permutation(a,a+3));
//到达321的时候会返回false,跳出循环

fill()

//把数组或容器中某段区间赋为相同值
int a[5];
fill(a,a+5,233); //将a[0]~a[4]赋值为233

sort()

sort(首元素地址,尾元素地址的下一个地址,比较函数(选填));
//对int double char皆可排序

//一般用法
sort(a,a+3);

//建立排序规则cmp

//1. 对于int double char
bool cmp(int a,int b){ 
    retirn a>b; //从大到小排序
}
//2. 对于结构体
bool cmp(node a,node b){
    //按照x从大到小
    //return a.x > b.x; 
    //按照x从大到小,再按照y从小到大
    if(a.x != b.x) return a.x > b.x;
    else return a.y < b.y;
}
sort(node,node+maxn,cmp);
//3. 对于容器(vector, string, deque)

lower_bound(), upper_bound()

//lower_bound(first,last,val) 寻找数组或容器[first,last)范围第一个值“大于等于”val的元素位置。是数组则返回指针;是容器则返回迭代器
//upper_bound(first,last,val) 寻找数组或容器[first,last)范围第一个值“大于”val的元素位置。是数组则返回指针;是容器则返回迭代器
//如果没有找到,则返回可以插入钙元素位置的指针或迭代器

//例子
int a[10];
int* lowerPos = lower_bound(a,a+10,-1); //返回数组指针
printf("%d",lowerPos-a); //返回元素的下标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值