9.4节练习

练习9.35:解释一个vector的capacity和size的区别。

reserve : 1.重新分配容器的容量  当分配容量小于原有容量时  什么都不做    大于时将容量扩展到新的容量  可能更大。

2.只适用于vector  和 string

shrin_to_fit 只适用于vector、string、和deque。
capacity和reserve只适用于vector和string
c.shrin_to_fit()   将capacity减小为与size相同
c.capacity()  不从新分配内存的话,c可以保存多少元素。
c.reserve(n)  从新分配容器大小

capacity 指容器的容量大小   size 指实际保存了多少个元素。

练习9.36:一个容器的capacity可能小于它的size吗?

答:不会   容器容量不会小于  容器里面的个数。

练习9.37:为什么 list或者array没有capacity成员函数?

答:list 的内存不是连续的,不存在容器容量太小而需要重新寻找连续内存的问题  

array像c中的数组一样是不能动态增长的所以也没有这个。

练习9.38 编写程序,探究在你的标准库实现中,vector是如何增长的。

	//验证代码中的capacity
	vector<int> v1 = { 1, 2, 3, 4};
	v1.push_back(5);
	int cap = v1.capacity();
	int siz = v1.size();
	cout << cap << endl;
	cout << siz << endl;

练习9.39:解释下面程序片段作了什么:

vector<string> svec;
svec.reserve(1024);
string word;
while(cin>>word)
    svec.push_back(word);
svec.resize(svec.size()+svec.size()/2);

答:上述代码  先声明一个容器  将容器的大小限制为最少为1024.

然后从标准输入逐个的读取数据并保存至容器,保存完毕之后,再用改变容器大小的函数resize改变容器大小在后面添加0.

练习9.40:如果上一题中的程序读入了256个词,在resize之后容器的capacity可能是多少?如果读入了512个、1000个、1048个呢?

答:猜想  读入256和512个应该是  1024

1000个可能会大于1024

1048个肯定大于1048   

猜你喜欢

转载自blog.csdn.net/xnnswmzdszyd/article/details/89679062
9.4