Loading

模板类vector和模板类Array

数组的替代品

模板类vector

模板类vector类似于string类,也是一种动态数组。你可以在运行阶段设置vector对象的长度,可在末尾附加新数据。还可在中间插入新

数据。基本上,它是使用new创建动态数组的替代品。实际上,vector类确实使用new和delete来管理内存,但这种工作是自动完成的。

首先,要使用vector对象,必须包含头文件vector,其次,vector包含在名称空间std中,因此可使用using编译指令、using声明或std::vector,第三,模板使用不同的语法来指出它存储的数据类型。第四,vector类使用不同的语法来指定元素数。

#include <vector>
using namespace std;
vector<int> vi;    // create a zero-size array of int
int n;
cin >> n;
vector<double> vd(n); // create an array of n doubles

其中, vi 是一个vector<int>对象, vd 是一个vector<double>对象。由于vector对象在插入或添加值时自动调整长度, 因此可以将vi

的初始长度设置为零。但要调整长度, 需要使用vector包中的各种方法。

一般而言, 下面的声明创建一个名为vt的vector对象, 它可存储n_elem个类型为typeName的元素:

vector<typeName> vt(n_elem);

其中参数n_elem 可以是整型常量,也可以是整型变量。

模板类Array(c++11)

vector 类的功能比数组强大, 但付出的代价是效率稍低。如果需要的是长度固定的数组,使用数组是更佳的选择,但代价是不那么方便

和安全。鉴于此,C++11新增了模板类array,它也位于名称空间std中。与数组一样, array 对象的长度也是固定的,也使用栈(静态内存

分配),而不是自由存储区,因此其效率与数组相同,但更方便, 更安全。

要创建array对象, 需要包含头文件array。array对象的创建语法与vector稍有不同

#include <array>
using namespace std;
array<int, 5> ai; // create array object of 5 ints
array<double, 4> ad= (1.2, 2.1, 3.43, 4.3);

推而广之,下面的声明创建一个名为arr的array对象,它包含n_elem个类型为typename的元素:

array<typeName, n_elem> arr;

与创建vector对象不同的是,n_elem不能是变量。

在C++11中,可将列表初始化用于vector和array对象,但在C++98中,不能对vector对象这样做。

posted @ 2021-10-27 17:40  yyyz  阅读(144)  评论(0编辑  收藏  举报