前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++复合类型之vector和array模板

C++复合类型之vector和array模板

原创
作者头像
老九学堂-小师弟
修改2019-10-09 17:57:54
1.1K0
修改2019-10-09 17:57:54
举报
文章被收录于专栏:编程语言xuetang编程语言xuetang

今天我们就给小伙伴们简单的介绍一下数组的替代品,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++让允许您使用任何一种表示法的原因所在。

老九学堂出品

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档