c++ vector resize & reserve
首先必须弄清楚两个概念:
1.capacity
指容器在分配新的存储空间之前能存储的元素总数。
2. size
指当前容器所存储的元素个数
在弄清这两个概念以后,很容易懂resize和reserve的区别
1).reserve表示容器预留空间,但并不是真正的创建对象,需要通过insert()或push_back()等创建对象。
resize既分配了空间,也创建了对象。
2).reserve只修改capacity大小,不修改size大小,resize既修改capacity大小,也修改size大小。
void TestVector(){
vector <int> wgw;
cout << "initilize size is: " << wgw.size() << endl;
cout << "initilize capacity is :" << wgw.capacity() <<endl;
wgw.reserve(10);
cout << "wgw size is: " << wgw.size() << endl;
cout << "wgw capacity is :" << wgw.capacity() <<endl;
vector <int>wgw1;
wgw1.resize(20);
cout << "wgw1 size is :" << wgw1.size()<<endl;
cout << "wgw1 capacity is:" << wgw1.capacity() <<endl;
wgw1.push_back(1);
cout << "wgw1 size is :" << wgw1.size()<<endl;
cout << "wgw1 capacity is:" << wgw1.capacity() <<endl;
wgw1.pop_back();
cout << "wgw1 size is :" << wgw1.size()<<endl;
cout << "wgw1 capacity is:" << wgw1.capacity() <<endl;
wgw1.resize(21);
cout << "wgw1 size is :" << wgw1.size()<<endl;
cout << "wgw1 capacity is:" << wgw1.capacity() <<endl;
wgw1.resize(1);
cout << "wgw1 size is :" << wgw1.size()<<endl;
cout << "wgw1 capacity is:" << wgw1.capacity() <<endl;
wgw1.reserve(1);
cout << "wgw1 size is :" << wgw1.size()<<endl;
cout << "wgw1 capacity is:" << wgw1.capacity() <<endl;
wgw1.reserve(100);
cout << "wgw1 size is :" << wgw1.size()<<endl;
cout << "wgw1 capacity is:" << wgw1.capacity() <<endl;
}
Erase与Size与capacity的关系。。。
void TestEraseVector()
{
unsigned int i;
vector<unsigned int> myvector;
// set some values (from 1 to 10)
for (i=1; i<=10; i++) myvector.push_back(i);
//show01
cout << "size is: "<< myvector.size() << endl;
cout << "capacity is:" << myvector.capacity() << endl;
// erase the 6th element
myvector.erase (myvector.begin()+5);
// erase the first 3 elements:
myvector.erase (myvector.begin(),myvector.begin()+3);
cout << "myvector contains:";
for (i=0; i<myvector.size(); i++)
cout << " " << myvector[i];
cout << endl;
//show02
cout << "size is: "<< myvector.size() << endl;
cout << "capacity is:" << myvector.capacity() << endl;
}