资源描述:
《matlab学习心得系列——005. 结构数组》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、005.结构数组编程语言要描述日常生活中的某一类事物,就是要赋予这类事物一个公共名称(类名),再把这类事物具有的各种属性分别存放为若干变量(数据元素),这就是“结构体”。结构体里再加上若干操作其数据元素的函数(成员函数),就是“类”。然后,“类”就可以作为新的数据类型定义对象(类的实例化),再操作这些对象,实现编程需要。以上就是面向对象的编程思想(适合C++或Java)。例如,描述学生,就用一个学生类Student;学生属性:学号、姓名、专业;实现操作:学生转专业。(粗略C++代码)classStudent{private://数据元素
2、一般设为该类的私有数据,防止属性被随意修改intnumber;stringname;//string定义字符串stringmajor;public://成员函数一般设为可公共访问Student(intnum,stringn,stringm);//类构造函数用于生成具体对象,必须与类名相同voidChangeMajor(Stringnewmajor);}Student::Student(intnum,stringn,stringm){number=num;name=n;major=m;}voidStudent::ChangeMajor(S
3、tringnewmajor)//Student::表示函数是来自Student类{major=newmajor;}//下面是使用Student类:Students1;//用Student类定义一个“学生”对象s1s1.ChangeMajor(“Math”);//把学生s1的专业修改为“Math”可见,借助结构体或类的编程,既能与现实世界中的事物建立自然的对应(符合思维习惯),又能实现模型化的“批量生产”(用“类”可以整体性地、一遍一遍地建立对象、操作对象)。这也是结构体或类(面向对象编程)的优势所在。__________________
4、________回到Matlab,元胞数组只是呆板的堆放数据的仓库,结构数组则具有了与实际对象所对应的结构属性,这等同于“C语言的结构体”、“C++或Java的类的数据成员部分”。结构数组是由若干个结构(struct)组成,每个结构都包含多个结构域(fields);数据必须存放在结构域中,可以是任何类型、任意大小的数据。例如,多个图形对象构成一个结构数组,每个图形对象就是一个结构,图形对象的一个属性对应一个结构域。即,结构数组(矩阵)的元素是结构,每个结构包含若干结构域。一、结构数组的创建1.用直接赋值语句创建例1创建学生的结构数组,每
5、个结构包含学号、姓名两个结构域(属性)student(1).number='001';%直接对结构数组第1个结构s(1)的结构域number赋值student(1).name='张三';student(1).number='002';student(2).name='李四';student运行结果:student=1x2structarraywithfields:numbername注意:上面是一维结构数组,也可以是二维或更多维的,例如,student(1,2).name='……';2.用struct函数创建语法:s=struct(‘f
6、ield1’,values1,‘field2’,values2,…)student(1)=struct('number','001','name','张三');student(2)=struct('number','002','name','李四');student运行结果同上。二、结构数组的操作1.访问结构数组中的结构域(1)通过结构域访问操作符“.”例如,student(2).name返回学生二的姓名:李四(2)利用deal()函数[name1,name2]=deal(student(:).name)返回name1=张三name2=
7、李四“:”表示所有结构域(3)利用getfield()函数获取指定结构域的值,对于前面的结构数组student,大小是1×2getfield(student,{1,2},'name')%返回结构数组student第1行第2列的结构的结构域为name的值,%相当于student(1,2).name运行结果:ans=李四1.其他操作(1)设置或修改结构域的值——setfield()student=setfield(student,{1,2},'name',‘王五’);——修改student(1,2).name的值为‘王五’注意:必须把set
8、field()返回值赋给原结构数组,修改才会生效。(2)删除结构数组的指定结构域——rmfield()s.field1=[1,2,3];s.field2='string';s.field3={123;456