C++数组与其两种替代品的优劣

目录

c++数组

数组的分类

模板类vector

模板类array

总结


c++数组

说到数组,学过C语言的朋友们都不陌生,那么C++数组和C语言数组的区别在哪里呢?

从语法上讲,两者的区别是非常小的,首先c++和C语言的数组定义格式都是

typeName arrayName [arraySize]

第一点不同:

在C语言中,arraySize只能是常量,甚至有const修饰的常量也是不能够参与数组定义。

但是在C++中,arraySize可以是变量,更何况是const常量。

第二点不同:

在数组初始化时,C++有两种方式,如下:

熟悉C语言的朋友应该知道,C语言数组初始化不能省略‘=’。

数组的分类

接下来我们说说C++数组的不同分类,总的来说,数组分为两大类

数组有动态联编和静态联编两种方式

静态联编产生的是静态数组,动态联编产生的是动态数组。

那么区别动态和静态联编的方法是什么呢:

答案是数组长度的确定时间,静态联编的长度确定在编译时,通俗就是数组声明时确定了长度

动态联编的长度确定于运行时,常常使用new来进行动态数组生成。

经常使用数组的朋友应该知道,数组虽然十分实用,但是在有些情况下操作极其复杂,并且数组如果操作不慎,常常有着越界风险。这时候,更加安全便捷的模板类 vector和array就能够替代数组进行操作。

模板类vector

模板类vector是new创建动态数组的替代品,实际上vector也是通过new和delete管理内存的,但是它的这种行为会自动完成,因此它的空间分配在堆区

要使用模板类vector,必须要包含头文件vector,并且vector在名称空间std中,最后,vector的声明格式为: vector< typeName > vt( n_elem );

其中n_elem是元素个数,在运行过程中确定,可以是整形常量,也可以是整形变量。

vector的成员也是与数组一样通过 vt [index] 进行读取。

总的来说,vector是动态数组的替代品,由于其众多的成员函数,它比数组更简便,更实用,也更安全,但是它的缺点是运行效率较低

这里介绍一种成员函数

成员函数at()

使用方法,vt. at ( index ), vt为vector创建的一个类型名,如果index不在0-n_elem-1的范围中,将会被程序捕获到非法索引。

这样的函数使用起来让vector相较数组更加安全,但是也使运行效率降低。

模板类array

模板类array是定长数组(静态数组)的替代品,拥有比数组更加方便与安全的特点,其空间分配在栈区。

需要使用array必须包含头文件array,并且其也位于名称空间std中

定义格式如下:

array< typeName , n_elem > arr;

其中n_elem不能是变量

统一的是,at函数在array中也能够使用。array的成员也是与数组一样通过 arr [index] 进行读取。

总的来说,array是定长数组的替代品,由于其功能复杂的成员函数,其功能远远比数组强大,也更安全。

总结

数组是我们常用的一种结构,但是与它的两种替代品vector和array相比,其安全性,功能性,以及便捷度都大大不如,可是两种模板类的运行效率稍微较低,在实际情况中我们可以斟酌使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值