美文网首页
【C++】复合类型之vector和array模板

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

作者: 老九君 | 来源:发表于2019-08-08 11:28 被阅读0次

    今天我们就给小伙伴们简单的介绍一下数组的替代品,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

    相关文章

      网友评论

          本文标题:【C++】复合类型之vector和array模板

          本文链接:https://www.haomeiwen.com/subject/fintjctx.html