vector是C++标准模板库中的一个容器,它是一个动态数组,本文主要介绍vector所占的内存大小、vector的动态扩充和vector的迭代器。
一、vector 容器的大小
vector类中的数据包括三个指针,分别指向数组的第一个数据的位置、数组的最后一个数据的下一个位置和数组空间的最后一个位置的下一个位置,如图1所示。因此vector的大小是12字节(sizeof(vector<T>) = 12)
![](https://img-blog.csdnimg.cn/e11722b695f64c50960a64b9537382f7.png)
二、vector的扩充
在向vector中加入一个新元素时,若数组中的数据已满(大小=容量),则此时需要对数组进行扩充,扩充的实现方式为:构造一个容量为原数组两倍的新数组,将原来数组的数据拷贝到新数组中,然后插入新的元素并释放掉原来的数组空间,这一过程会调用大量的构造函数(构造新的数组)和析构函数(销毁原数组)。
三、vector的迭代器
迭代器的本质是一个指针,主要作用是作为容器和算法之间沟通的桥梁,因此C++中的所有容器都配备了相应的迭代器。在G2.9中,vector的迭代器是一个普通的指针,指针类型为vector中的数据类型;在G4.9中,vector的迭代器被包装成了类,类中有一个指向vector中数据元素类型的指针。