小白学习算法笔记 —— C++之STL
将简单学习C++ 的STL(标准模板库)中最基本的部分内容,这部分内容对于提高程序的编写效率和运行效率都十分有用。
- STL:(Standard Template Library) 标准模板库
- 包含一些常用的算法如排序查找,还有常用的数据结构如可变长数组、链表、字典等。
- 使用方便,效率较高
- 要使用其中的算法,需要添加头文件#include <algorithm>
1.用sort()进行排序运用
用法一:对基本类型的数组从小到大排序
sort(数组名+n1, 数组名+n2)
- n1和n2都是int类型的表达式,可以包含变量
- 如果n1=0,则 + n1 可以不用写
将数组中下标范围为 [n1, n2) 的元素从小到大排序。(注意好了,下标为n2的元素不在排序区间内,这其实非常人性化,可以仔细想想。)
废话也不多说了,直接上代码:
int a[]={12, 8, 9, 2, 4, 17};
sort(a, a+6);
//对整个数组从小到大排序
//结果:{2, 4, 8, 9, 12, 17}
int a[]={12, 8, 9, 2, 4, 17};
sort(a+2, a+4};
//结果:{12, 8, 2, 9, 4, 17}
用法二:对元素类型为T的基本类型数组从大到小排序
sort( 数组名+n1, 数组名+n2, greater<T>())
先上代码再说:
int a[]={12, 8, 9, 2, 4, 17};
sort(a+1,a+4,greater<int>());
//结果:{12, 9, 8, 2, 4, 17}
学到这里我就很感恩STL了,以后不用再去写这些基础的排序了(泪目!)
好了,学到这里任务条就走一大半了,接下来要学习自定义排序喽!
用法三:用自定义的排序规则,对任何类型T的数组排序
sort(数组名+n1, 数组名+n2, 排序规则结构名();
排序规则结构的定义方式:
struct 结构名
{
bool operator()(const T & a1, const T & a2) const{
//若a1应该在a2前面,则返回true。
//否则返回false。
}
};
注释:a1, a2是的传入参数的变量名,可以随意换;T是比较的类型,后面代码中可以体会一下;最重要的是这个定义中的其他东西不要动,原样写上去就好。
还是代码解释一下:
struct student{
char name[20];
int Id;
double gpa;
}
//假定我们有十个数据,实在不想写了。对象是students
struct student_rule
{
bool operator()(const student & a1, const student & a2) const{
return a1.gpa < a2.gpa;
}
};//这里我们写了排序规则结构体,T就是student。
sort(students, students+sizeof(students)/sizeof(student), student_rule());
//这里就对students的是个数据按照student.Id从小到大排序。
写到这里就结束了,如果能给屏幕前的你带来一点帮助,那我便十分高兴了。最后,衷心感谢郭炜老师,感恩感谢。