C++标准模板库(STL)---algorithm

使用algorithm头文件

1.max(x,y)返回最大值

min(x,y)返回最小值

abs(x)返回x的绝对值

#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
    int x=1,y=-2;
    printf("max=%d min=%d abs(y)=%d\n",max(x,y),min(x,y),abs(y));
    
return 0;    
}

2.swap(x,y)交换x和y的值

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

3. reverse(a,b)将[a,b)内数据反转

    int a[5]={1,2,3,4,5};
    reverse(a,a+4);//将a[0]到a[3]反转
    printf("反转后元素输出:\n");
    for(int i=0;i<5;i++){
        printf("%d ",a[i]);
    }

4.next_permutation()给出一个序列在全排列中的下一个序列

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

5.fill()把数组或容器中的某一断区间赋为某个相同的值

    int c[5]={1,2,3,4,5};
    fill(c,c+5,233);
        for(int i=0;i<5;i++){
        printf("%d ",c[i]);
    }

6.sort()默认从小到大排序,可使用比较函数cmp自定义排序规则。

bool cmp(int a,int b){
    return a>b;
}

    int d[6]={1,0,-3,4,9,2};
    sort(d,d+6);
    for(int i=0;i<6;i++){
        printf("%d ",d[i]);
    }
    printf("\n从大到小排序:");
    sort(d,d+6,cmp);
    for(int i=0;i<6;i++){
        printf("%d ",d[i]);
    }

7.lower_bound(first,last,val)在范围内找第一个大于等于val的元素的位置
    upper_bound(first,last,val)在范围内找第一个大于val的元素的位置

    int f[10]={1,2,2,3,3,3,5,5,5,5};
    int *lowerPos=lower_bound(f,f+10,-1);
    int *upperPos=upper_bound(f,f+10,-1);
    printf("寻找-1 lowerPos:%d upperPos:%d\n",lowerPos-f,upperPos-f);
    //寻找1
    lowerPos=lower_bound(f,f+10,1);
    upperPos=upper_bound(f,f+10,1);
    printf("寻找1 lowerPos:%d upperPos:%d\n",lowerPos-f,upperPos-f);
    //寻找3
    lowerPos=lower_bound(f,f+10,3);
    upperPos=upper_bound(f,f+10,3);
    printf("寻找3 lowerPos:%d upperPos:%d\n",lowerPos-f,upperPos-f);
    //寻找6
    lowerPos=lower_bound(f,f+10,6);
    upperPos=upper_bound(f,f+10,6);
    printf("寻找6 lowerPos:%d upperPos:%d\n",lowerPos-f,upperPos-f);

全部代码如下:

#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
    return a>b;
}
int main(){
    int x=1,y=-2;
    //最大值,最小值,绝对值
    printf("max=%d min=%d abs(y)=%d\n",max(x,y),min(x,y),abs(y));
    //交换
    swap(x,y);
    printf("交换后x=%d y=%d\n",x,y);

    //reverse()将元素反转
    int a[5]={1,2,3,4,5};
    reverse(a,a+4);//将a[0]到a[3]反转
    printf("反转后元素输出:\n");
    for(int i=0;i<5;i++){
        printf("%d ",a[i]);
    }

    //4.next_permutation()给出一个序列在全排列中的下一个序列
    printf("1,2,3的全排列:\n");
    int b[4]={1,2,3};
    do{
        printf("%d%d%d \n",b[0],b[1],b[2]);
    }while(next_permutation(b,b+3));

    //5.fill()把数组或容器中的某一断区间赋为某个相同的值
    int c[5]={1,2,3,4,5};
    fill(c,c+5,233);
    for(int i=0;i<5;i++){
        printf("%d ",c[i]);
    }
     printf("\n从小到大排序:");

    //6.sort排序
    int d[6]={1,0,-3,4,9,2};
    sort(d,d+6);
    for(int i=0;i<6;i++){
        printf("%d ",d[i]);
    }
    printf("\n从大到小排序:");
    sort(d,d+6,cmp);
    for(int i=0;i<6;i++){
        printf("%d ",d[i]);
    }

    //7.lower_bound()在范围内找第一个大于等于val的元素的位置
    //upper_bound()在范围内找第一个大于val的元素的位置
    printf("\n");
    int f[10]={1,2,2,3,3,3,5,5,5,5};
    int *lowerPos=lower_bound(f,f+10,-1);
    int *upperPos=upper_bound(f,f+10,-1);
    printf("寻找-1 lowerPos:%d upperPos:%d\n",lowerPos-f,upperPos-f);
    //寻找1
    lowerPos=lower_bound(f,f+10,1);
    upperPos=upper_bound(f,f+10,1);
    printf("寻找1 lowerPos:%d upperPos:%d\n",lowerPos-f,upperPos-f);
    //寻找3
    lowerPos=lower_bound(f,f+10,3);
    upperPos=upper_bound(f,f+10,3);
    printf("寻找3 lowerPos:%d upperPos:%d\n",lowerPos-f,upperPos-f);
    //寻找6
    lowerPos=lower_bound(f,f+10,6);
    upperPos=upper_bound(f,f+10,6);
    printf("寻找6 lowerPos:%d upperPos:%d\n",lowerPos-f,upperPos-f);
return 0;
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值