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

一般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