Matlab学习心得系列-005.结构数组
《Matlab学习心得系列-005.结构数组》由会员分享,可在线阅读,更多相关《Matlab学习心得系列-005.结构数组(7页珍藏版)》请在装配图网上搜索。
1、005. 结构数组编程语言要描述日常生活中的某一类事物,就是要赋予这类事物一个公共名称(类名),再把这类事物具有的各种属性分别存放为若干变量(数据元素),这就是“结构体”。结构体里再加上若干操作其数据元素的函数(成员函数),就是“类”。然后,“类”就可以作为新的数据类型定义对象(类的实例化),再操作这些对象,实现编程需要。以上就是面向对象的编程思想(适合C+或Java)。例如,描述学生,就用一个学生类Student;学生属性:学号、姓名、专业;实现操作:学生转专业。(粗略C+代码)class Studentprivate: / 数据元素一般设为该类的私有数据,防止属性被随意修改int numb
2、er;string name; / string定义字符串string major;public: / 成员函数一般设为可公共访问Student(int num, string n, string m); / 类构造函数用于生成具体对象,必须与类名相同void ChangeMajor(String newmajor);Student: Student(int num, string n, string m)number = num;name = n;major = m;void Student: ChangeMajor(String newmajor) / Student:表示函数是来自Stu
3、dent类 major = newmajor; / 下面是使用Student类:Student s1; / 用Student类定义一个“学生”对象s1s1. ChangeMajor(“Math”); / 把学生s1的专业修改为“Math”可见,借助结构体或类的编程,既能与现实世界中的事物建立自然的对应(符合思维习惯),又能实现模型化的“批量生产”(用“类”可以整体性地、一遍一遍地建立对象、操作对象)。这也是结构体或类(面向对象编程)的优势所在。_回到Matlab,元胞数组只是呆板的堆放数据的仓库,结构数组则具有了与实际对象所对应的结构属性,这等同于“C语言的结构体”、“C+或Java的类的数据
4、成员部分”。结构数组是由若干个结构(struct)组成,每个结构都包含多个结构域(fields);数据必须存放在结构域中,可以是任何类型、任意大小的数据。例如,多个图形对象构成一个结构数组,每个图形对象就是一个结构,图形对象的一个属性对应一个结构域。即,结构数组(矩阵)的元素是结构,每个结构包含若干结构域。一、 结构数组的创建1. 用直接赋值语句创建例1 创建学生的结构数组,每个结构包含学号、姓名两个结构域(属性)student(1).number = 001; % 直接对结构数组第1个结构s(1)的结构域number赋值student(1).name = 张三;student(1).numb
5、er = 002;student(2).name = 李四;student运行结果:student = 1x2 struct array with fields: number name注意:上面是一维结构数组,也可以是二维或更多维的,例如,student(1,2).name = ;2. 用struct函数创建语法:s = struct(field1, values1, field2, values2, )student(1) = struct(number, 001, name, 张三);student(2) = struct(number, 002, name, 李四);student运行
6、结果同上。二、结构数组的操作1. 访问结构数组中的结构域(1) 通过结构域访问操作符“.”例如,student(2).name 返回学生二的姓名:李四 (2) 利用deal( )函数name1, name2 = deal(student(:).name)返回 name1 = 张三 name2 = 李四“:” 表示所有结构域(3) 利用getfield( )函数获取指定结构域的值,对于前面的结构数组student,大小是12getfield(student,1,2,name) % 返回结构数组student第1行第2列的结构的结构域为name的值, % 相当于student(1,2).name运
7、行结果:ans = 李四2. 其他操作(1) 设置或修改结构域的值setfield( )student = setfield(student,1,2,name, 王五);修改student(1,2).name的值为王五注意:必须把setfield( )返回值赋给原结构数组,修改才会生效。(2) 删除结构数组的指定结构域rmfield( )s.field1 = 1,2,3;s.field2 = string;s.field3 = 1 2 3; 4 5 6;ss = rmfield(s,field2,field3) s = rmfield(s,field1)运行结果:s = field1: 1 2
8、 3 field2: string field3: 2x3 cells = field1: 1 2 3s = 1x1 struct array with no fields.注意:必须把rmfield( )返回值赋给原结构数组,删除才会生效。(3) 判断函数isfield(s, fieldname)判断s中是否含有名为fieldname的结构域;isstruct(s)判断s是否是结构数组3. 结构数组与元胞数组的相互转换(1) 结构数组转元胞数组struct2cell( )s.field1 = 1,2,3;s.field2 = string;s.field3 = 1 2 3; 4 5 6;sc
9、 = struct2cell(s)运行结果:s = field1: 1 2 3 field2: string field3: 2x3 cellc = 1x3 double string 2x3 cell (2) 元胞数组转结构数组s = cell2struct(c, fields, dim)c = 001, 张三, 175, 65; 002, 李四, 178, 70 fields = Num,Name,Height,Weight; % 临时变量,存放全部的结构域名 s = cell2struct(c,fields,2) % dim=2表示将c按行转为结构数组(即每行是一个结构)% dim=1表示将c按列转为机构数组(即每列是一个结构) s(1)运行结果:c = 001 张三 175 65 002 李四 178 70s = 2x1 struct array with fields: Num Name Height Weight ans = Num: 001 Name: 张三 Height: 175 Weight: 65下次内容:字符串。
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。