今天我们就给小伙伴们简单的介绍一下数组的替代品,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,请备注来自CSDN
老九学堂免费C、C++、Java课程地址: https://study.163.com/courses-search?keyword=老九学堂

【老九学堂】【C++】复合类型之vector和array模板相关推荐

  1. C++ Primer Plus 学习笔记(第 4 章 复合类型)

    C++ Primer Plus 学习笔记 第 4 章 复合类型 数组 数组(array)是一种数据格式,能够存储多个同类型的值. 要创建数组,可使用声明语句.数组声明应指出以下三点: 存储在每个元素的 ...

  2. hive 复合类型_hive原生和复合类型的数据加载和使用

    原生类型 原生类型包括TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY (Hive 0.8.0以上才可用),TIMESTAM ...

  3. 【老九学堂】【C++】位运算符

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...

  4. 【老九学堂】【初识C语言】C语言中的运算符

    1运算符和表达式 C语言运算符是说明特定操作的符号,它是构造C语言表达式的工具.C语言的运算异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理.除了常见的三大类,算术运算符.关系 ...

  5. 【老九学堂】【初识C语言】位运算符

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...

  6. 【老九学堂】【C++】数组与指针

    不知道在通过前面的内容学习后,是否有很多小伙伴都会认为数组和指针是等价的,数组名表示数组的首地址呢?不幸的是,这是一种非常危险的想法,并不完全正确,前面我们将数组和指针等价起来是为了方便大家理解(在大 ...

  7. 【老九学堂】【C语言进阶】内置函数补充

    原型: 用法:#include 有些编译器需要#include 功能: 改变mem_address所指内存区域的大小为newsize长度. 说明: 如果重新分配成功则返回指向被分配内存的指针,否则返回 ...

  8. 【老九学堂】【C++】CodeBlocks安装配置

    C++配置相关文档 小伙伴们看这里,直接下载CodeBlocks集成版安装!!!直接下载CodeBlocks集成版安装!!!直接下载CodeBlocks集成版安装!!!重要的事说三遍,没有基础的小伙伴 ...

  9. 老九学堂之分布式设计教材

    老九学堂之分布式设计教材 作者:老九-技术大黍 原文:分布式系统设计教材 社交:知乎 公众号:老九学堂(新人有惊喜) 特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者授权 前言 本文由老 ...

最新文章

  1. 使用观察者模式在 Silverlight 中切换用户控件
  2. 重新组织函数--《重构》阅读笔记
  3. java 比较源文件_Beyond Compare比较Java源代码文件的操作方法
  4. LinkedList源码阅分析
  5. 火爆全网的《李焕英》通过 AI 还原“复活”了
  6. MysqL的root用户不允许远程连接
  7. windows下 gcc 下载及使用指南
  8. IDEA插件-Translation提示更新TKK失败,配置有道翻译解决
  9. GUI输出中文为乱码解决方式
  10. 【光学】基于Matlab实现二维光子晶体的能带图和场
  11. 微信小程序云开发(2)— 云数据库
  12. 图片Base64编码 图片Base64在线转换
  13. 用一个开关,控制LEP灯的亮和灭
  14. 6. Python 元组,不可变的列表,滚雪球学 Python
  15. 用计算机打字打错了怎么办,电脑键盘打字错乱,怎么快速解决?
  16. 从表征到行动---意向性的自然主义进路(续二)
  17. 蓝牙 韦东山_韦东山生活实例演绎法讲解蓝牙
  18. 对于产业互联网的认识,直接关系着我们究竟会以怎样的心态来看待它
  19. 声网AI降噪测评系统初探
  20. 全球与中国货船维修保养市场深度研究分析报告

热门文章

  1. Android 源码 图形系统概述
  2. H5实例教学--微信内嵌视频2(素材来自腾讯孙尚香末日机甲皮肤宣传H5)
  3. 无法获取 dpkg 前端锁_济南一小区分类垃圾桶上了锁?闲置不用惹居民质疑
  4. 书籍推荐总结 C/C++/Java/Python/Linux/算法
  5. App Store Connect 上传app时,屏幕快照尺寸5.8-Inch,6.5-Inch,iPhone XS,iPhone XS Max, iPhone XR
  6. JS 遍历JSON对象中的键值对
  7. 机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败
  8. discard long time none received connection. , jdbcUrl :
  9. PHP中private什么意思,PHP中的private和public还有protected的区别
  10. 恐鬼症服务器不显示怎么回事,恐鬼症steam9月28日更新内容一览