一、模板类vector
模板类vector类似于string 类,也是一种动态数组。您可以在运行阶段设置vector对象的长度,可在末尾附加新数据,还可在中间插入新数据。基本上,它是使用new创建动态数组的替代品。实际上,vector类确实使用new和delete来管理内存,但这种工作是自动完成的。
首先要提醒的是,要使用 该模板类,要引用头文件<vector>
其使用方法如下:
vector<typeName> vt(n_elem);
其中typename是类型名,vt则是您想定义的名称,n_elem则是元素个数,n_elem既可以是整型常量,也可以是整型变量。
其应用示例如下:
当然了,如果我设置n为2,那就会出现下标越界的现象,系统虽然不会提示,但运行起来会有很大的麻烦,这种模板类虽然可以让系统自动帮你释放内存,但是代价就是牺牲了时间成本,没错,vector运行效率不高,因此,如果您想定义一个长度固定的数组,不妨看一看下面这个模板类。
二、模板类array
与数组一样,array对象的长度也是固定的,也使用栈(静态内存分配),而不是自由存储区,因此其效率与数组相同,但更方便,更安全。要创建array 对象,需要包含头文件array。 array对象的创建语法与vector稍有不同:
其使用方法如下:
array<typeName,n_elem> arr;
当然了,n_elem只能是常量,不能是变量且书写格式千万不要和vector相混淆了。
那么,数组,vector对象以及array对象各自的区别是什么呢?
首先,注意到无论是数组、vector对象还是 array对象,都可使用标准数组表示法来访问各个元素。其次,从地址可知,array对象和数组存储在相同的内存区域(即栈中,而vector 对象存储在另一个区域(自由存储区或堆)中。第三,可以将一个array对象赋给另一个array对象;而对于数组,必须逐元素复制数据。
复制元素示例如下:
要注意的是:array创建的对象赋值时两对象中所包含的元素个数及元素类型必须相同,否则无法copy。
ERR :
使用vector和array时如果写下面这个代码,运行起来的时候就会报错:
这是因为arr[-1]指的是访问arr[0]左边一位的地址,而这个地址不归arr所有,因此这种行为是不安全的,当然,我们可以用成员函数"at"来防止这种现象产生 :
虽然这种方法可以使您的代码更加安全,但代价就是运行的时间更长。
到这里,所有内容就全部讲完啦!