问题描述
#include<iostream>#include<vector>usingnamespacestd;template<typenameT>voidlistInfo(vector<T>&v){cout<<"Containercapacity:"<<v.capacity()<<"size:"<<v.size()<<endl;}intmain(){vector<double>data;listInfo(data);cout<<endl<<"Aftercallingreserver(100):"<<endl;data.reserve(100);listInfo(data);vector<int>numbers(10,-1);cout<<endl<<"Theinitialvaluesare:";for(vector<int>::size_typei=0;i<numbers.size();i++)cout<<""<<numbers[i];cout<<endl;vector<int>::size_typeoldc=numbers.capacity();vector<int>::size_typenewc=oldc;cout<<endl;listInfo(numbers);for(inti=0;i<1000;i++){numbers.push_back(i);newc=numbers.capacity();if(oldc<newc){oldc=newc;listInfo(numbers);}}return0;}其中运行结果如下:分析下,为啥?为什么capacity每次增加size的一半Containercapacity:10size:10Containercapacity:15size:11Containercapacity:22size:16Containercapacity:33size:23Containercapacity:49size:34Containercapacity:73size:50Containercapacity:109size:74Containercapacity:163size:110Containercapacity:244size:164Containercapacity:366size:245Containercapacity:549size:367Containercapacity:823size:550Containercapacity:1234size:824
解决方案
解决方案二:
capacity是vector占据的实际内存空间size是vector中的实际元素个数capactiry总是大于等于size其目的是避免频繁的内存重分配而影响性能至于capacity一次增加多少记得之前看过effectivec++上有提到过
解决方案三:
就是的默认增加一半,说是为了提高效率。其实我觉得你管他增加多少。只要能添加删除。没有丢失就行。这个还是比较好用的
解决方案四:
增加多少可以定制的。
解决方案五:
capacity不想这样,可以给capacity赋值。就能节省一点内存空间。