0
点赞
收藏
分享

微信扫一扫

c++vector(string)对象的存储

南柯Taylor 2022-04-24 阅读 80
容器

一、vector对象是如何增长的

为了支持快速随机访问,vector将元素连续存储,同时容器的大小是可变的,那么在我们向容器中添加元素时,如果没有空间容纳新元素,那么容器只能分配新的内存空间来保存新旧元素,那么这样的性能将会非常低

为了减少空间重新分配的策略,不得不获取新的内存空间时,vector的实现通常会分配比新的空间需求更大的内存空间,容器预留这些空间作为备用

在这样的基础上,vector仍然是连续的,只不过是在vector的尾部有一部分的预留空间,因此在vector中间插入元素的时间复杂度仍旧不是O(1)

二、管理容器的成员函数

vector<int>vec;
for (int i = 0; i < 100; i++)
{
	vec.push_back(1);
	cout << vec.capacity() << '\n';	//表示当前vec的容量
}
cout << "#####" << '\n';
vec.shrink_to_fit();			//将容量减小为size同大小
cout << vec.capacity() << '\n';
vec.reserve(200);				//分配至少能容纳n个元素的内存空间
cout << vec.capacity() << '\n';
vec.reserve(50);
cout << vec.capacity() << '\n';

//shrink_to_fit只适用于vector string deque
//capacity reserve只适用于vector string

只有当需要的内存空间超过当前容量时,reserve调用才会改变vector的容量,如果需求大小(size)大于当前容量时,reserve至少分配与需求一样大的内存空间,因此调用reserve不会减少容器占用的内存空间

举报

相关推荐

0 条评论