vector是如何增长的?c++笔记(1)
vector是c++里面十分重要的一个容器,如果没有特殊的要求,一般情况下我们都是选择c++来进行编程。
这里介绍vector在内存中的存储方式以及STL模版中有关于vector内存空间改变的函数
vector空间分布
如果学过数据结构,我们知道链表在内存中的储存是离散的,其间使用指针来连接,
而我们说:vector,array在内存中是连续储存的,
我们学过数组的插入元素,效率非常低下,这也是为什么vector只包含push_back()函数的道理。
函数介绍
概念:
capacity
容器在分配新的存储空间之前能存储的元素总数(提前分配好无元素的新空间,以加快效率)
size
指当前容器存储的元素总个数
.capacity()
查看vector的capacity
.reserve()
reserve()改变capacity,不改变size
例如:
int main()
{
vector<int> v(10,1);
v.reserve(20);
v.push_back(99);
for(auto x = v.begin();x!=v.end();x++)
{
cout<<*x<<" ";
}
cout<<endl;
cout<<v.capacity()<<endl;
return 0;
}
输出:
1 1 1 1 1 1 1 1 1 1 99
20
相对的
.resize()将会改变capacity和size
如:
int main()
{
vector<int> v(10,1);
v.resize(20);
v.push_back(99);
for(auto x = v.begin();x!=v.end();x++)
{
cout<<*x<<" ";
}
cout<<endl;
cout<<v.capacity()<<endl;
return 0;
}
输出:
1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 99
40