vector.size() vector.capacity size_type vector.reserve()

#include <iostream>
#include <vector>
using namespace std;
void main()
{
 vector<int> ivec;
 cout<<"ivec.size() = "<<ivec.size()<<endl; //ivec现存数据数量
 cout<<"ivec.capacity() = "<<ivec.capacity()<<endl;//ivec最多可以保存数据的数量
 cout<<"---------------------------------"<<endl;
 
 for(vector<int>::size_type ix = 0;ix !=24; ++ix)
 {
  ivec.push_back(ix);
 }
 cout<<"ivec.size() = "<<ivec.size()<<endl; //ivec现存数据数量
 cout<<"ivec.capacity() = "<<ivec.capacity()<<endl;//ivec最多可以保存数据的数量
 cout<<"---------------------------------"<<endl;
 
 ivec.reserve(50); //将capacity至少设定为50,可能会更大
 //size应该为24;capacity应该大于等于50,具体值依赖于标准库实现
 cout<<"ivec.size() = "<<ivec.size()<<endl; //ivec现存数据数量
 cout<<"ivec.capacity() = "<<ivec.capacity()<<endl;//ivec最多可以保存数据的数量
 cout<<"---------------------------------"<<endl;
 
 //接下来用光这些预留空间:
 //添加元素用光多余容量
 while(ivec.size() != ivec.capacity())
 {
  ivec.push_back(0);
 }
 cout<<"ivec.size() = "<<ivec.size()<<endl; //ivec现存数据数量
 cout<<"ivec.capacity() = "<<ivec.capacity()<<endl;//ivec最多可以保存数据的数量
 cout<<"---------------------------------"<<endl;
 //如果我们现在再添加一个新元素,vector就不得不重新分配空间:
 ivec.push_back(32);
 //size应该为51;capacity应该大于等于51,具体值依赖于标准库实现
 cout<<"ivec.size() = "<<ivec.size()<<endl; //ivec现存数据数量
 cout<<"ivec.capacity() = "<<ivec.capacity()<<endl;//ivec最多可以保存数据的数量
 cout<<"---------------------------------"<<endl;
}

运行结果:

ivec.size() = 0
ivec.capacity() = 0
---------------------------------
ivec.size() = 24
ivec.capacity() = 32
---------------------------------
ivec.size() = 24
ivec.capacity() = 50
---------------------------------
ivec.size() = 50
ivec.capacity() = 50
---------------------------------
ivec.size() = 51
ivec.capacity() = 100
---------------------------------

 

从最后的结果可以看出:vector的实现采用的策略似乎是在每次需要分配新内存空间时将当前容量翻倍。

 

 

 

你可能感兴趣的:(vector,vector.size())