记录一下初次学习C++的一些奇奇怪怪的想法,关于vector中的resize,capacity,reserve方法
想法,C++Primer书中练习9.39,9.40
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<string> svec;
//svec.reserve(1024);
string word;
for(int i=0;i!=1002;i++)
{
svec.push_back("i");
}
cout<<"capacity_pre1="<<svec.capacity()<<endl;//在每次push_back后都会检查一次,是否size=capacity如果是则将当前capacity=2倍的当前size (先检查大小再写入,还是先写入再扩大我还没研究过)
svec.push_back("2");
cout<<"capacity_pre2="<<svec.capacity()<<endl;
cout<<"resize="<<svec.size()+svec.size()/2<<endl;
svec.resize(svec.size()+svec.size()/2);
cout<<"size="<<svec.size()<<" ";
cout<<"capacity="<<svec.capacity()<<endl;
}
保存一下自己想法,书中只提到了执行insert与resize或者reserve的时候给定大小超过当前capacity才可能重新分配空间。
当resize大小超过capacity的时候,capacity会变成当前非空元素的两倍再于resize中参数进行比较,如果resize的值还是大于翻倍后的capacity ,则capacity大小=resize大小,否则capacity两倍当前非空元素个数(描述感觉有点乱
本例中非空元素为1003个,resize(1504),当前capacity大小为1024,此处的1024是当svec.size()=svec.capacity=512,(当然这个512是在之前256的时候capacity*2得到的).显然1504>1024 ,但最终capacity大小为2006。
编译器Dev-C++ 5.10 运行结果
如果我们改一下让resize大于两倍非空元素的个数这里随便给一个3000,
sevc.resize(3000);
显然3000>2006,最终的capacity变成了3000
虽然不知道这个知识点有什么用,但先记录一下(: