复习一下~
STL,C++中的标准模板库, 使用起来方便并且效率较高;
sort函数有三种用法:
一:对基本类型数组从小到大排序
sort( 数组名+n1,数组名+n2);
将数组中下标从n1到n2的元素进行从小到大排序,不包括n2,通过n1,n2 可以对整个或者部分数组排序;
二:对元素类型为T的基本类型数组从大到小排序
sort( 数组名+n1,数组名+n2,greater<T>());
T对应各种元素类型
同样,将数组中下标从n1到n2的元素进行从大到小排序,不包括n2,通过n1,n2 可以对整个或者部分数组排序;
啊抱歉,之前写成了greater(T),一定要注意啊,不然编译过不了的
三:第三种自定义排序规则
sort(数组名+n1,数组名+n2,排序规则结构名);
排序规则结构体定义:
struct 结构名{
bool operator()(const T &a1, const T &a2){
return ;
}
};
返回值为true说明a1应该排在a2前面,false则相反,T对应元素类型。
举个例子:
排序规则为按个位数从小到大排序:
struct Rule1{
bool operator()(const int &a1, const int &a2){
return (a1%10)<(a2%10);
}
};
调用时sort(a,a+sizeof(a)/sizeof(int),Rule1());
sort还可以对结构体进行排序。
#include<iostream>//c++ STL中sort函数调用的三种方法
#include<cstring>//第二种对元素类型为T的基本类型数组从大到小排序sort( 数组名+n1,数组名+n2,greater<T>());
#include<algorithm>//用sort要包含这个头文件
using namespace std;
void Print(int a,int size){
for(int i=0;i<size;i++)
cout<<a[i]<<",";
cout<<endl;
}
struct Rule1{//按从大到小排序
bool operator()(const int &a1, const int &a2){
return a1>a2;//返回值为true时,说明a1应该排在a2前面
}
};
struct Rule2{//按个位数从小到大排序
bool operator()(const int &a1, const int &a2){
return (a1%10)<(a2%10);
}
};
int main(){
int a[]={12,45,3,98,21,7};
sort(a,a+sizeof(a)/sizeof(int));//sort的第一种用法,对基本类型数组从小到大排序,sort( 数组名+n1,数组名+n2);
Print(a,sizeof(a)/sizeof(int));//将会从小到大输出3,7,12,21,45,98
sort(a,a+sizeof(a)/sizeof(int),Rule1()); //第三种自定义排序规则sort(数组名+n1,数组名+n2,排序规则结构名);
Print(a,sizeof(a)/sizeof(int));//将会从大到小输出98,45,21,12,7,3
sort(a,a+sizeof(a)/sizeof(int),Rule2());
Print(a,sizeof(a)/sizeof(int));//将会按个位数从小到大输出 21,12,3,45,7,98
return 0;
}
竟然把这里当成自己的笔记本了~~
判断闰年:
// 能被400整除 或者 能被4整除而不能被100整除 的年份
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
return ture;
再更一道例题吧:
整数按照个位数从小到大排。个位数相同,则大的排前面
点按照离原点从近到远排。距离相同,则按x坐标从小到大排。x坐标也相同,则按y坐标从小到大排
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
struct Point{
int x;
int y;
};
struct Rule1{
bool operator()(const int &a1, const int &a2){
if(a1%10==a2%10)
return a1>a2;
else
return a1%10<a2%10;
}
};
struct Rule2{
bool operator()(const Point &a, const Point &b){
if((a.x*a.x+a.y*a.y)==(b.x*b.x+b.y*b.y)){
if(a.x==b.x)
return a.y<b.y;
else
return a.x<b.x;
}
else
return (a.x*a.x+a.y*a.y)<(b.x*b.x+b.y*b.y);
}
};
int main()
{
int a[8] = {6,5,55,23,3,9,87,10 };
sort(a,a+8,Rule1());
for(int i = 0;i < 8; ++i)
cout << a[i] << "," ;
cout << endl;
Point ps[8] = {{1,0},{0,1},{0,-1},{-1,0},{1,-1},{1,1},{2,0},{-2,0} } ;
sort(ps,ps+8,Rule2());
for(int i = 0;i < 8; ++i)
cout << "(" << ps[i].x << "," << ps[i].y << ")";
return 0;
}