【C++】复合类型之vector和array模板
今天我们就给小伙伴们简单的介绍一下数组的替代品,vector和array,模板类vector类似于string类,也是一种动态数组。您可以在运行阶段的设置vector对象的长度,可在末尾附加新数据,还可以在中间插入新数据。基本上,它是使用new创建动态数组的替代品 。
vector类的功能比数组强大,但付出的代价是效率稍低。如果您需要的是长度固定的数组,使用数组是更加的选择,但代价是不那么方便和安全。有鉴于此,C++11新增了模板类array,它也是位于名称空间std中。下面我们就来简单的介绍一下:
1、模板类vector
模板类vector类似与string类,也是一种动态数组。您可以在运行阶段设置vector对象的长度,可在末尾附加新数据,还可以在中间插入新数据。基本上,它是使用new创建动态数组的替代品。实际上vector类确实使用new和delete来管理内存,但这种工作是自动完成的。
--vector的使用方法:
首先,要使用vector对象,必须包含头文件vector。
其次,vector包含在名称空间std中,因此您可使用using编译指令、using声明或std::vector。
第三,模版使用不同的语法来指出它存储的数据类型。
第四,vector类使用不同的语法来指定元素数。
示例:
其中,vi是一个vector对象, vd是一个vector对象。由于vector对象在您插入或添加值时自动调整长度,因此可以将vi的初始长度设置为零。但要调整长度,需要使用vector包中的各种方法。
一般而言,下面的声明创建一个名为vt的vector对象,它可以存储n_elem个类型为typeName的元素:
vector
vt(n_elem); ,其中,参数n_elem可以是整形常量,也可以是整型变量。
2、模板类array
vector类的功能比数组强大,而且使用的是自由存储空间,但是付出的代价是效率稍低。如果您需要的是长度固定的数组,使用数组是更佳的选择,但代价是不那么方便和安全。有鉴于此,C++11新增了模板类array,它也位于名称空间std中。与数组一样,array对象的长度也是固定的,也使用栈(静态内存分配),而不是自由存储区,因此其效率与数组相同,但更方便更安全。
使用方法:
首先要创建array对象,需要包含头文件array.创建语法如下:
推而广之,下面的声明创建一个名为arr的array对象,它包含n_elem个类型为typename的元素:
需要注意的是,与创建vector对象不同的是,n_elem不能是变量。
3、比较数组、vector对象和array对象
从一个程序开始:
输出结果:
需要注意的地方:
(1)一个array对象可以赋给另一个array对象,而数组,必须逐个元素复制数据。
(2)注意这个语句:a1[-2] = 20.2;
其含义是:找到a1指向的地方,向前移两个double元素,并将20.2存储到目的地。也就是说,将信息存储在数组的外面。与C语言一样,C++也不检查这种超界错误。
vector和array对象能够禁止这种行为吗?可以选择使用成员函数at()。
使用at()时,将在运行期间捕获非法索引,而程序默认将中断。这种额外的检查的代价是运行时间更长,这就是C++让允许您使用任何一种表示法的原因所在。
老九学堂出品,转载请私信哦
对于文章内容有不理解的可以添加老九君个人QQ:614940318,请备注来自简书
老九学堂免费C、C++、Java课程地址:
https://study.163.com/courses-search?keyword=%E8%80%81%E4%B9%9D%E5%AD%A6%E5%A0%82