小小的说一下结构体

PS:其实小小的说一下不就是浅论么= =

C++中,有一个非常有意思的东西就是struct,加上最近做了几个关于结构体的题,于是心血来潮讲一讲结构体吧。

结构体的基本格式:

struct   node
{
 数据类型1  变量1;
 数据类型2  变量2;
 数据类型3  变量3;
 ……
 ……
 数据类型n  变量n;
}结构体名称;

结构体一般用于某些关联性很强却类型不同(或者条件不同)的数据中,例如:

struct xuesheng     //学生
{
      int chengji;     //成绩
      string  mingzi;      //名字
      int mingci;      //名次
      char  chenghao;    //称号
}a[11];

这样用起来我们就可以将学生所有信息归类,比如这样:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct xuesheng
{
      int chengji;
      string  mingzi;
      int mingci;
      char  chenghao;
}a[11];
int main()
{
     int i;
     for(i=1;i<=10;i++)
     {
         cin>>a[i].chenghao>>a[i].chengji;
         cin>>a[i].mingci>>a[i].mingzi;
     }
     for(i=1;i<=10;i++)
     {
         cout<<a[i].chenghao<<a[i].chengji;
         cout<<a[i].mingci<<a[i].mingzi;
     }
     return 0;
}

当然,我们也可以通过结构体做其他操作,比如我们现在如果要将学生按成绩由大到小输出,就可以利用结构体+STL——sort函数(别打我,我懒得写排序)来实现。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
struct xuesheng
{
      int chengji;
      string  mingzi;
      int mingci;
      char  chenghao;
}a[11];
//int cmp(xuesheng s,xuesheng t);
int main()
{
     int i;
     for(i=1;i<=10;i++)
     {
         cin>>a[i].chenghao>>a[i].chengji;
         cin>>a[i].mingci>>a[i].mingzi;
     }
     sort(a+1,a+11,cmp);
     for(i=1;i<=10;i++)
     {
         cout<<a[i].chenghao<<a[i].chengji;
         cout<<a[i].mingci<<a[i].mingzi;
     }
     return 0;
}

这里有一个cmp函数,和sort有很大的联系,实际上这是一个关于结构体排序的东西,他的用法如下:

int cmp(结构体变量1,结构体变量2)
{
return 变量1>变量2;
}
***********
***********
sort(a,a+n,cmp);      //从大到小排列;

我们将成绩放入,就成了这样:

int cmp(xuesheng s,xuesheng t)    //注意这里是struct的名称,不是结构体名称(有点乱)
{
return s.chengji>t.chengji;
}

sort(a,a+n,cmp);      //从大到小排列;

这样子,我们就把学生按成绩从大到小排出来了,当然,其他的数据也会跟着变化。再输出的时候,所有信息就会按照成绩整齐的排列出来,还是非常方便的。

--------------------------------------------------分隔符--------------------------------------------------

结构体中其他操作还有很多,这里也说不完(毕竟浅论orz),剩下的东西还需要读者自己去琢磨。

//好不容易有了一个正常的博文,内心暗爽+1s;

时间: 2024-09-28 16:12:34

小小的说一下结构体的相关文章

C#学习笔记之结构体

1.概述 结构是一种与类相似的数据类型,不过它较类更为轻量,一般适用于表示类似Point.Rectangle.Color的对象.基本上结构能办到的类全都能办到,但在某些情况下使用结构更为合适,后面会有提到. 结构具有以下特点: 结构可以实现接口. 结构可以声明带参数的构造函数. 结构不能声明默认构造函数(没有参数的构造函数)或析构函数. 结构是值类型,而类是引用类型. 实例化结构体时可以不使用new运算符. 结构类型是不可抽象.隐式密封的,故不能使用abstract和sealed修饰符. 在结构

关于结构体

1.结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构. typedef struct People { int a; char b; double c; }P: 其中:struct是关键词, People是标签, a b c是成员, P是此结构体声明的变量. 于是在声明变量的时候就可:P p1; 这里的P实际上就是struct People的别名.P==struct People 另外这里也可以不写People(于是也不能struct People p1;了,

Linux C中结构体初始化

    在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated initializer).下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .name = "

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

结构体的大小

系统在存储结构体变量时存在地址对齐问题,编译器在编译程序时会遵循两条原则: 一.结构体变量中成员的偏移量必须是成员大小的整数倍: 二.结构体大小必须是所有成员大小的整数倍. 1 #include<stdio.h> 2 3 struct a{ 4 int i; 5 float f; 6 char c; 7 double d; 8 long l; 9 }b; 10 11 int main(){ 12 printf("%d\n",sizeof(b.i));// 4 13 prin

关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型

关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使用NSStringFromCGRect(CGRect rect)来直接打印一个结构体,其他打印可以参考以下内容 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFrom

38-oc常用结构体

常用结构体 在开发中苹果推荐我们使用CG开头的结构体, 也就是说NS开头的结构体一般不用 OC中定义一个点,用什么结构体 NSPoint; CGPoint point = NSMakePoint(10, 20); OC中保存物体尺寸的,用什么结构体 NSSize; CGSize size = NSMakeSize(100, 50); OC中保存某个物体的位置和尺寸,用什么结构体 NSRect; CGRect rect = NSMakeRect(10, 20, 100, 50); NSNumber

结构体在固件库中的应用

上次介绍了一般结构体的定义以及引用方法,那么接下来将对结构体在官方固件库是如何具体使用的做出简单说明. 结构体指针成员变量引用方法是通过“→”符号来实现,比如要访问student1结构体指针指向的结构体的成员变量name,那么方法是: stuednt1—>name; 如在STM32官方固件库中对端口使用模式结构体定义如下: typedef enum { GPIO_Mode_AIN = 0x0, //模拟输入模式 GPIO_Mode_IN_FLOATING = 0x04, //浮空输入模式 GPI

C# 定义一个学生的结构体,输入学生信息,学号,姓名,身高,按身高排序输出

class Program { //定义一个结构体 struct student//student就是我们自己造的新数据类型 { public int code;//public修饰符 public string name;//结构体的成员 public decimal height; } static void Main(string[] args) { ArrayList arr = new ArrayList(); for (int i = 0; i < 3; i++) { student