vector 常被称为“容器”,习惯将之理解为动态数组。它表示对象的集合,其中所有对象都相同,每个对象都对应一个索引,索引用来访问对象。作为动态数组,vector 有一个指针指向一片连续的内存空间。但是,这个内存空间肯定不是无限大的,当内存装不下数据时,系统会自动申请一片更大的空间,把原来的数据拷贝过去,释放原来的内存空间。具体来看。
1、内存分配
vector 里面有 2 个成员函数——size() 和 capacity(),capacity()返回 vector 当前实际申请的空间大小,这部分空间称为缓冲区。而 size() 返回的是当前对象缓冲区元素的个数。显然,capacity() 是大于等于 size()的,当 size() 和capacity() 相等时,如果继续使用 push_back() 添加元素,vector 就会扩容。
先看一段程序。
int main()
{
vector<int> v1;
for (int i = 1; i < 12; i++)
{
v1.push_back(i);
cout << v1.capacity() << " " << v1.size() << endl;
}
}
看看运行结果:
我们可以看到,起初,vec