结构体入门/基础
2026-04-08 20:29:02
发布于:浙江
前言
本人是xxs蒟蒻,并不了解厉害的算法,觉得内容简单轻喷。
正题
结构体定义
结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。
结构体的声明格式(伪代码)
struct 结构体类型(自定义名称,但不能是int, double等)
{
数据类型 成员名1;
数据类型 成员名2;
...
};
注意末尾要有分号。
结构体变量的声明
这里有个方法。
方法一: struct Player p1;
方法二: Player p1;
方法三: 在声明格式的最后一个分号前写上结构体变量名。
当然结构体数组也同理。
结构体成员的访问
当我们需要访问结构体里的某一元素时,需要通过.来访问.
例: p1.blood; p1.defense;
结构体变量的赋值
我们在复制时可以先访问变量再进行赋值。
例: p1.name="syh";
结构体变量的初始化
与结构体的赋值差不多,下面的例子可以助于理解。
例:Player p1={"syh",100,10,15};
注意:初始化时必须按照声明时的成员顺序,少/多赋值或类型不一样会导致错误。
结构体类型数组的初始化
例:
Player p[3]={
"syh","1","2";
"Vesper","1","2";
};
结构体的输入输出
例:cin>>p1.name; cout<<p1.name;
拓展知识(比较函数)
编写方法(伪代码):
bool cmp(类型 变量1,类型 变量2)
{
比较规则
}
如果是要从大到小排序,可以将规则设为return a.mark>b.mark;这种。
同理,从小到大可以为return a.mark<b.mark;。
具体例子:
bool cmp(Student a, Student b)
{
if(a.h<b.h)
{
return true;
}
else
{
return false;
}
}
这里有个注意点,函数需要写在结构体的声明后,不然是不能使用结构体类型的。
例题:
洛谷 B2125 最高分数的学生姓名
这道题考查了结构体数组的使用,我们先定义数组,再比较每个成绩,最后输出最大的即可。
#include <iostream>
using namespace syh;
struct Students //声明结构体
{
int mark;
string name;
} p[100005]; //结构体数组
int main()
{
int n, maxn=-1; //不会有低于0分的分数,所以maxn设负数
string maxi;
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>p[i].mark>>p[i].name;
if(maxn<p[i].mark) //判断成绩
{
maxn=p[i].mark; //更新最大值
maxi=p[i].name; //储存现在的最高分学生姓名
}
}
cout<<maxi;
return 0;
}
洛谷 B2158 谁考了第 k 名
这道题与上题相似,由于成绩排名从大到小排,所以函数要返回a.mark>b.mark把成绩排完后直接输出第 pk 项的编号与成绩即可。
#include <iostream>
#include <algorithm>
using namespace syh;
struct Students //声明结构体
{
int h;
double mark;
} p[1000005]; //结构体数组
bool cmp(Students a,Students b) //判断成绩
{
return a.mark>b.mark; //判断条件
}
int main()
{
int n, k;
cin>>n>>k;
for(int i = 1;i<=n;i++)
{
cin>>p[i].h>>p[i].mark;
}
sort(p+1,p+n+1,cmp); //将结构体数组按成绩排序
cout<<p[k].h<<" "<<p[k].mark;
return 0;
}
后记
大佬们这篇算是syh的一个自我复习,排版太拉了致歉,如果有好的建议可以发在plq,谢谢大家了。
全部评论 8
- 置顶
结构体真的需要些创人计划吗思考思考思考
2026-04-08 来自 浙江
0因为我写不了别的,要不我把这个标签删了吧
2026-04-08 来自 浙江
0OK
2026-04-08 来自 浙江
0我准备憋坨打的(
2026-04-08 来自 浙江
0
看完大家可以去做做这题
A21673.生日2026-04-12 来自 浙江
1666
2026-04-09 来自 浙江
0ddd
2026-04-08 来自 浙江
0ddd
2026-04-08 来自 浙江
0ddd
2026-04-08 来自 浙江
0ddd
2026-04-08 来自 浙江
0还是无人在意:(
2026-04-08 来自 浙江
0
























有帮助,赞一个