algorithm头文件下的常用函数(1)

1.max()、min()、abs()
max(x,y)和min(x,y)分别返回x和y中的最大值和最小值,且参数必须是两个(可以是浮点数)。
如果想要返回三个数x,y,z的最大值,可以使用max(x,max(y,z))的写法。
abs(x)返回x的绝对值。注意x必须是整数,浮点数的绝对值请用math头文件下的fabs。
2.swap()
swap(x,y)用来交换x和y的值。
3.reverse()
reverse(it,it2)可以将数组指针在[it,it2)之间的元素或容器的迭代器在[it,it2)范围内的元素进行反转。
int a[10]={10,11,12,13,14,15};
reserve(a,a+4);//将a[0]~a[3]反转。
for(int i=0;i<6;i++)
cout<<a[i]<<" ";
输出结果:13 12 11 10 14 15
如果是对容器中的元素(例如string字符串)进行反转,结果也是一样:
string str="abcdefghi";
reserve(str.begin()+2,str.begin()+6);//对str[2]~str[5]反转
for(int i=0;i<str.length();i++)
cout<<str[i];
输出结果:abfedcghi
4.next_permutation()
5.fill()
fill()可以把数组或容器中的某一区间赋为某个相同的值。和memset不同,这里的赋值可以是数组类型对应范围中的任意值。
int a[5]={1,2,3,4,5}
fill(a,a+5,233);//将a[0]~a[4]均赋值为233
for(int i=0;i<=5;i++)
cout<<a[i]<<" ";
输出结果:233 233 233 233 233
6.lower_bound()和upper_bound()
lower_bound()和upper_bound()需要用在一个有序数组或容器中。
lower_bound(first,last,val)用来寻找在数组或容器的[first,last)范围内第一个值大于等于val的元素的位置,
upper_bound(first,last,val)用来寻找在数组或容器的[first,last)范围内第一个值大于val的元素的位置。
如果是数组,则返回该位置的指针;如果是容器,则返回该位置的迭代器。
如果数组或容器中没有需要寻找的元素,则lower_bound()和upper_bound()均返回可以插入该元素的位置的指针或迭代器
(即假设存在该元素时,该元素应当在的位置)。
int a[10]={1,2,2,3,3,3,,5,5,5,5};
int *lowerpos=low_bound(a,a+10,-1);
int *upperpos=upper_bound(a,a+10,-1);
cout<<lowrpos-a<<" "<<upperpos-a<<endl;
输出结果:0 0
如果只想获得欲查元素的下标,就可以不使用临时指针,而直接令返回值减去数组首地址即可:
int a[10]={1,2,2,3,3,3,5,5,5,5};
cout<<lower_bound(a,a+10,3)-a,upper_bound(a,a+10,3)-a);
输出结果:3 6

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是蒸的c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值