文章目录
- 1 capacity()和size() 介绍
- 2 vector满了之后,capacity()会自动了扩充为原来的2倍 ?
1 capacity()和size() 介绍
size是指容器当前拥有元素的个数,
capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。
- 如
vector<int> ivect,ivect.reserve(10),ivect.size()=0,ivect.capacity()=10
- 当向ivect中插入元素时,只要没有超过10个,那么capacity就不变,而size为你插入的元素的个数。
- 当插入第10个数据时,
capacity=size=10
, - 当插入第11个数据时,容器
重新分配存储空间
:ivect.capacity()=20,而ivect.size()=11
, - 即容器重新分配空间的话是现有空间的2倍进行分配,以保证vector的效率。
int main()
{
std::vector<int> v1;
v1.reserve(10);//容器预留 len 个元素长度
cout << "v1初始 size 和 capacity大小:\n " << "\tv1_size : "<<v1.size() << "\t v1_capacity: " << v1.capacity() <<endl << endl;
// 添加元素
cout << "v1c中插入元素后 size 和 capacity大小: " << v1.size() << endl << endl;
for (int i = 0; i < 13; i++)
{
v1.push_back(i);
cout << "\tv1_size: " << v1.size() << "\tv1_capacity: " << v1.capacity() << endl;
}
return 0;
}
从上面结果来看,
当插入第11个数据时,容器重新分配存储空间
:ivect.size()=11
,
而ivect.capacity()=15
并非上面所说ivect.capacity()=20。
2 vector满了之后,capacity()会自动了扩充为原来的2倍 ?
为了验证函数那个扩充2倍的说法,又找了其他资料
有一种的说法:vector满了之后,会自动了扩充为原来的2倍
vector未雨绸缪机制,满了之后,会自动了扩充为原来的2倍
(提高效率,避免频繁”配置新空间-数据移动-释放旧空间”)
作者在qt上运行的,我在VS上运行,中止“vector迭代器不兼容”
int main() {
vector<int> v;//最初容器没有元素,容量为空
cout << "容量" << v.capacity() << endl;
vector<int>::iterator it ;
int i = 0;
int count = 0;
for ( i = 0; i < 1000; i++) {
v.push_back(i);//插入第一个元素,开辟1空间;插入第二个元素,开辟2空间;插入第三个元素,开辟4空间。。。每次二倍
if (it != v.begin()) { //如果不相等,说明又开辟了新空间,v.begin指向新空间的开头;
count++;
cout <<"开辟空间容量: " << v.capacity() << endl;
it = v.begin();//it记录当前空间的开头
}
}
return 0;
}