备战蓝桥杯从STL库开始---最简单的几个容器

备战蓝桥杯从STL库开始—最简单的几个常用容器

1、STL库的介绍

学习C/C++语言的基础很简单,但是写写算法的能力不是人人都具备的,本人蒟蒻一枚,时常感觉算法的概念原理都懂,但就是写不出来东西,于是发现了一个“百宝箱”——STL(Standard Template Library,标准模板库)
一般分为algorithm(算法)、container(容器)和iterator(迭代器)三类。模板库内容主要包含了一些常用的算法如快速排序、简单查找等,当然还包括了一些常用的数据结构,如可变长数组、链表、字典等。
一般以它的高效著称。注解:打比赛return 0少不了!!!

2、基础知识

  1. 快速排序sort

    sort排序是学习STL必须要知道的,内部算法结构是快速排序,不懂的同学可以先去了解一下快排的原理,毕竟手打快排也有可能在比赛场上需要。

    #include<iostream>
    #include<algorithm>
    #include<cstdlib> 
    using namespace std;
    int main(){
    	int a[10];
    	for(int i=0;i<10;i++){
    		a[i]=rand()%100;//存入十个随机数 
    	}
    	for(int i=0;i<10;i++){
    		cout<<a[i]<<" ";
    	}
    	cout<<endl; 
    	sort(a+0,a+10);//默认是从小到大排序
    	//其中第一个参数 代表数组的起始一个元素的位置,第二个参数代表数组最后一个元素的起始位置
    	//只要你愿意,你可以只排序一部分的数据试一试。
    	for(int i=0;i<10;i++){
    		cout<<a[i]<<" ";
    	} //排序结果 
    }
    

    在这里插入图片描述

    那么如何从大到小排序呢?

    其实sort方法有内置好的方法让你从大到小排序,在这里,我们讲一下如何自己写一个方法从大到小排序。

    #include<iostream>
    #include<algorithm>
    #include<cstdlib> 
    using namespace std;
    bool cmp(int x,int y){//这里的参数一定要是你排序类型的参数
    	return x>y;//从大到小排序 
    }
    int main(){
    	int a[10];
    	for(int i=0;i<10;i++){
    		a[i]=rand()%100;//存入十个随机数 
    	}
    	for(int i=0;i<10;i++){
    		cout<<a[i]<<" ";
    	}
    	cout<<endl; 
    	sort(a+0,a+10,cmp);//默认是从小到大排序
    	//其中第一个参数 代表数组的起始一个元素的位置,第二个参数代表数组最后一个元素的起始位置
    	//只要你愿意,你可以只排序一部分的数据试一试。
    	for(int i=0;i<10;i++){
    		cout<<a[i]<<" ";
    	} //排序结果 
    }
    
     ![在这里插入图片描述](https://img-blog.csdnimg.cn/202104090001127.png)
    

    ​ 一般sort排序是针对字典序进行排序,所以当你是字符串数组的时候也是可以进行排序的,这一点大家可以自行尝试。同时还支持double类型的排序,也可以尝试一下。

    ​ 针对结构体数据也可以使用sort进行排序,我们以输入学生成绩进行排序为例子,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n;
    struct stu{
    	int num;//学号 
    	int c,m,e;//三科成绩 
    	int sum;//总分 
    }student[310];//定义学生的结构体类型 
    bool cmp(stu a,stu b){
    	if(a.sum>b.sum){
    		return a.sum>b.sum;
    	}else if(a.sum<b.sum){
    		return 0;
    	}else{
    		if(a.c>b.c){
    			return a.c>b.c;
    		}else if(a.c<b.c){
    			return 0;
    		}else{
    			return a.num < b.num;
    		}
    	}
    }
    int 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值