浅析C++的结构体与容器
①结构体
百度百科上对于结构体的解释是:结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。
我们来说说结构体的具体作用是什么:
I.在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
II.结构体在函数中的作用不是简便, 最主要的作用就是封装。 封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
接下来演示一下结构体的定义和使用方法等。
//结构体的定义 struct Student{ //声明一个结构体类型Student int num; //声明一个整形变量num char name[20]; //声明一个字符型数组name char sex; //声明一个字符型变量sex int age; //声明一个整形变量age float score; //声明一个单精度型变量 char addr[30]; //声明一个字符型数组addr }
//定义结构体变量 #include<iostream> using namespace std; int main(){ struct Student{ //声明一个结构体类型Student int num; //声明一个整形变量num char name[20]; //声明一个字符型数组name char sex; //声明一个字符型变量sex int age; //声明一个整形变量age float score; //声明一个单精度型变量 char addr[30]; //声明一个字符型数组addr }; Student student1,student2;// 定义结构体类型变量student1和student2 cout<<sizeof(Student)<<endl; cout<<sizeof(student1)<<endl; cout<<sizeof(student2)<<endl; return 0; }
在C语言中,结构体是不允许存在函数的,而在C++中是允许的,那么我们来谈一下C++中结构体和类的区别:
类与结构体在C++中有三点区别。
(1)class中默认的成员访问权限是private的,而struct中则是public的。
(2)从class继承默认是private继承,而从struct继承默认是public继承。
(3)C++的结构体声明不必有struct关键字,而C语言的结构体声明必须带有关键字(使用typedef别名定义除外)。
网上查阅资料得知: 容器是用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型。
C++中有两种类型的容器,顺序容器和关联容器。
顺序容器主要有vector等,由于vector用得比较多,故本文主要介绍vector的使用方法。
vector基于模板实现,需包含头文件vector。
迭代器简介
除了使用下标来访问vector对象的元素外,标准库还提供了访问元素的方法:使用迭代器。迭代器是一种检查容器内元素并且遍历元素的数据类型。
1.容器的iterator类型
每种容器类型都定义了自己的迭代器类型,如vector:
vector<int> ::iterator iter;变量名为iter。
2.begin和end操作
每种容器都定义了一队命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的元素指向第一个元素。
vector<int>::iterator iter=v.begin();
若v不为空,iter指向v[0]。
由end返回的迭代器指向最后一个元素的下一个,不存在,若v为空,begin和end返回的相同。
*iter=0;
iter++即将迭代器向前移动一个位置
即将v[0]赋值为0,由end返回的不允许进行解操作。
==和!=操作符来比较两个迭代器,若两个迭代器指向同一个元素,则它们相等,否则不想等。
迭代器使用举例:
for(vector<int>::iterator iter=v.begin();iter!=v.end();iter++)
*iter=0;
将vector中的元素全部赋值为0;
//1.定义和初始化 vector<int> vec1; //默认初始化,vec1为空 vector<int> vec2(vec1); //使用vec1初始化vec2 vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2
//2.常用操作方法 vec1.push_back(100); //添加元素 int size = vec1.size(); //元素个数 bool isEmpty = vec1.empty(); //判断是否为空 cout<<vec1[0]<<endl; //取得第一个元素 vec1.insert(vec1.end(),5); //从vec1.back位置插入值为5的元素 //vec1.pop_back(); //删除末尾元素 cout<<(vec1==vec2)?true:false; //判断是否相等==、!=、>=、<=... vector<int>::iterator iter = vec1.begin(); //获取迭代器首地址 vector<int>::const_iterator c_iter = vec1.begin(); //获取const类型迭代器 //vec1.clear(); //清空元素 //3.遍历 //下标法 int length = vec1.size(); for(int i=0;i<length;i++) { cout<<vec1[i]; } cout<<endl<<endl; //迭代器法 vector<int>::const_iterator iterator = vec1.begin(); for(;iterator != vec1.end();iterator++) { cout<<*iterator; }