12.2 vector的基本知识
我们开始循序渐进地设计vector,首先考虑一个非常简单的应用:
显然,我们创建一个有4个double类型元素的vector,并且分别为这四个元素赋值0.33、22.0、27.2与54.2。这四个元素被编号为0、1、2与3。C++标准库容器中的元素编号总是从0(零)开始。从0开始编号是很常见的,它是C++程序员的一个通用规范。一个vector中的元素数量被称为它的大小。因此,age的大小为4。一个vector中的元素被编号(索引)为0到size-1。例如,age中的元素被编号为0到age.size()-1。我们可图示age如下:
如何在计算机内存中实现这种“图解设计”?如何像这样储存和访问值呢?显然,我们需要定义一个类,并且将这个类称为vector。另外,它需要一个数据成员保存它的大小,以及另一个数据成员保存它的元素。但是,如何表示一个大小可变的元素集合?可以使用标准库vector,但(在此情境下)这是一种欺骗:我们正在构建一个vector!
那么,如何表示上图中的箭头?先不考虑它,我们可以定义一个固定大小的数据结构:
忽略符号表示方面的细节,我们将得到如下所示的图:
此定义简单合用,但我们第一次尝试用push_back()添加元素时就遇到了问题:无法添加元素;程序中的元素数量固定为4个。我们需要一个比保存固定数量元素的数据结构更强大的东西。因为如果我们将vector定义为保存固定数量的元素,那么改变元素数量的操作如push_back()就无法实现了。基本上,我们需要一个数据成员来指向一组元素,这样,当需要更大空间时可以令它指向另一组元素。这个数据成员可能是第一个元素的内存地址这样的东西。在C++中,一种可以保存地址的数据类型称为指针(pointer),它在语法上使用后缀*来区分,因此double*表示“指向double的指针”。这样,我们就可以定义自己的第一个版本的vector类了: ...

