在c++中,随着程序需处理的问题复杂化,已有的数据类型(int,char,double,float,short等)显得不满足使用要求。因此,c++允许用户根据需要自己声明一些类型。其实,数组就是用户自己声明的类型 。
除了数组以外,用户还可以声明结构体类型,共用体类型,枚举类型,类类型等,这些都称为自定义类型。
一、结构体 (1)结构体的定义声明一个结构体的一般形式:
struct 结构体类型名{
成员列表
};//别忘了分号
说明:
1.struct是声明结构体时必须用的关键字,向编译器表示这是一个结构体类型。
2.结构体类型名用来作为结构体类型的标志。
3.大括号中是该结构体的成员,由他们组成一个特定的结构体。
【示例】声明一个学生类型的结构体:
//一般在所有函数之前
struct student{
string name;
char xingbie;
int number,age;
double score
};
(2)定义结构体变量
结构体仅仅声明了一种类型,它只相当于一个模型,但没有数据,系统也不分配内存给结构体。为了能使用结构体类型中的数据,应定义结构体变量,并存放具体数据。
定义方式如下:
//一般在所有函数之前
struct student{
string name;
char xingbie;
int number,age;
double score
};
//上面已经有了一个结构体类型student,可以用它来定义变量
int main(){
struct student a,b;
}
二、结构体与sort
c++中可以使用sort()函数进行排序,用法如下:
需要包含对应的头文件:#include(用万能头 bits/stdc++.h的当我没说)
例如:将a[0]~a[n-1]按照从小到大排序
sort(a,a+n);
将a[1]~a[n]按照从大到小排序
//比较方式
bool cmp(int a,int b){
return (a>b)?1:0;//a>b时返回true,否则返回false
}
.....
sort(a+1,a+n+1,cmp);
当然,我们也可以将sort配合结构体使用
举个例子,编程里有一道题,精挑细选(不知道大家听没听过)由于是多关键字排序,所以需要按自己的想法编写cmp规则
int cmp(struct guan a,struct guan b){
if(a.len>b.len)
return 1;
else if(a.len == b.len && a.areab.num)
return 1;
else
return 0;
}
cmp规则可以参考这种写法,也可以参考下面一种写法
int cmp(guan x,guan y){
if(x.len != y.len) return x.len>y.len;
if(x.area!= y.area) return x.area>y.area;
if(x.num != y.num) return x.num>y.num;
}
这种写法看起来更简洁一些



