algorithm头文件下的常用函数

algorithm头文件下的常用函数

使用algorithm头文件,需要在头文件下加一行“using namespace std;”才能正常使用。
一.max()、min()、abs()

1)max(x,y)和min(x,y)分别返回x和y的最大值和最小值,且参数必须是两个(可以时浮点 数)。如果想返回三个数x、y、z的最大值,可以使用max(x,max(x,y));
2)abs(x)返回x的绝对值。注意:x必须是证书,浮点数的绝对值请使用math头文件下的fabs。
二、swap(x,y)用来交换x和y的值*

int x=1,y=2;
swap(x,y);
printf("%d %d\n",x,y);//2 1

三、reverse(it,it2);可以将数组指针在[it,it2)之间的元素或容器的迭代器在[it,it2)范围内的元素进行反转。

int a[10]={10,11,12,13,14,15};
reverse(a,a+4);//将a[0]~a[3]反转
for(int i=0;i<6;i++)
{
printf("%d",a[i]);//13、12、11、10、14、15
}

如果是对容器中的 元素(例如string字符串)进行反转,结果也一样。

string str="abcdefghi";
reverse(str.begin()+2,str.begin()+6);//abfedcghi

四、next_permutation()给出一个序列在全排列中的下一个序列。

int a[10]={1,2,3};
do{
printf("%d%d%d\n",a[0],a[1],a[2]);
}while(next_permutation(a,a+3));

输出结果:

123
132
213
231
312
321

五、fill()可以把数组或容器中的某一段区间赋为某个相同的值。和memset不同,这里的赋值可以时数组类型对应范围中的任意值。

int a[5]={1,2,3,4,5}fill(a,a+5,233);//233  233  233  233  233

六、sort()
1.如何使用sort排序

sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));

如果不写比较函数,则默认对前面给出的区间进行递增排序。

int a[6]={9,4,2,5,6,-1};
//将a[0]~a[3]从小到大排序
sort(a,a+4);//2 4 5 9 6 -1

sort(a,a+6)://-1 2 4 5 6 9

2.如何实现比较函数cmp
如果想要从大到小来排序,则要使用比较函数cmp来告诉sort合适要交换元素。

bool cmp(int a,int b)
{
return a>b;//可以理解为当a>b时把a放在b前面
}

七、lower_bound(()和upper_bound()
两个函数需要用在一个有序数组或容器中。
1) lower_bound(first,last,val)用来寻找数组或容器的[first,last)范围中第一个大于等于val的元素的位置,如果是数组,则返回该位置的指针;如果是容器,则返回该文之的迭代器。
2) upper_bound(first,last,val)用来寻找数组或容器的[first,last)范围中第一个大于val的元素的位置,如果是数组,则返回该位置的指针;如果是容器,则返回该文之的迭代器。

int a[10]={1,2,2,3,3,3,5,5,5,5};
int* lowerpos=lower_bound(a,a+10,3);
int* upperpos=lower_bound(a,a+10,3);
printf("%d, %d\n",lowerpos-a,upperpos-a);//3, 6

注意:这里直接令返回值减去数据首地址就可获得预查元素的下标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值