练习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