struct的基本定义
struct使用户自定义的数据类型,里面可以加入变量和函数等“成员”。打个比方,用户建立的整个结构体就是一个人,那里面的手、头、腿等就是成员。这时,我们就可以用建立结构体时建立的变量来配合'.'来调用。
struct语法
struct 结构体名称{
数据类型 变量一;
数据类型 变量二[数组元素个数]={成员1,成员2,成员3...};
...
}结构体变量[元素个数];
例一
输入学生名字、总成绩、宿舍号。按照如下规则排序:
按照学生总成绩降序排序,如遇到总成绩相同,则按照宿舍号升序排序,如宿舍号相同,则按照名字字典序升序排序。
代码(注释超详细):
#include<iostream>
#include<algorithm>//sort快排需要的库
using namespace std;
struct stu{//结构体名称(|stu|dent)
string name;//学生名称
int sc;//成绩 score
int dn;//宿舍号 Dormitory No
}a[60];//结构体变量,数据为1<=n<=60
bool cmp(stu a,stu b){
if(a.sc!=b.sc){
return a.sc>b.sc;//总成绩降序
}else if(a.dn!=b.dn){
return a.dn<b.dn;//宿舍号升序
}else{
return a.name<b.name;//字典序升序
}
}//sort排序规则,我们在第十期讲过
int main(){
int n;//定义学生数量
cin>>n;//输入人数
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].sc>>a[i].dn;//敲黑板1,这里的用法为:结构体变量名[i].成绩
}//for循环输入name sc dn
sort(a+1,a+1+n,cmp);//敲黑板2,这里不需要用'.'来使用,直接就用结构体变量就行了
for(int i=1;i<=n;i++){
cout<<a[i].name<<' '<<a[i].sc<<' '<<a[i].dn<<endl;//结构体成员输出
}//for循环输出
return 0;
}//注释不好写,求个三连QAQ
struct套函数
有时候我们可以在struct中套上一个函数,语法为:
struct 结构体名称{
数据类型 变量一;
数据类型 变量二[数组元素个数]={成员1,成员2,成员3...};
...
函数数据类型 函数名(数据类型 参数1,数据类型 参数2...){
函数内容;
}
}结构体变量[元素个数];
例二
#include<iostream>
#include<string>
struct Person{
Person(std::string name);
std::string greet(std::string other_name);
std::string m_name;
};
Person::Person(std::string name){
m_name = name;
}
std::string Person::greet(std::string other_name){
return "Hi " + other_name + ", my name is " + m_name;
}
int main(){
Person m_person("JANE");
std::string str = m_person.greet("JOE");
std::cout<<str<<std::endl;
return 0;
}
结构体中定义结构体
顺序如下:
struct stu{
string name;
int sc;
}a[65];
在结构体中套一个结构体。
struct tea{
string name;
int mon;
}a[20];
这样就可以使用两个(或多个点)来调用任意一个结构体,当然在嵌套一个(或多个)也没有问题。
在int main主函数的调用。
//循环输入不写了
cout<<a[1].tea.name;//输出第一个老师的姓名
那么我们的结构体讲解也就讲完了,戳戳小手,点个三连。