C++:STL vector:sizeof(vector)


原文地址:http://blog.csdn.net/zcsylj/article/details/7857009

int的大小是4,定義vector<int> vec,vec中有一個元素,sizeof(vec)=20,如果有1000個元素,則sizeof(vec)是多少?

 1 #include <iostream>  
 2 #include <vector>  
 3 using namespace std;  
 4 int main()  
 5 {  
 6      vector<int> vec;  
 7      for(int i=0;i<100;i++)  
 8      {  
 9         vec.push_back(i);  
10         cout<<sizeof(vec)<<endl;   
11         cout<<vec.size()<<endl;  
12      }   
13 }  

輸出結果:

1 20  
2 1  
3 ……  
4 20  
5 100  
6 請按任意鍵繼續. . .  

由此可以看出:sizeof(vec)只取決於vector里面存放的數據類型,與元素個數無關。該值應該是與編譯器相關的。

 1 #include <iostream>  
 2 #include <vector>  
 3 using namespace std;  
 4 int main()  
 5 {  
 6     cout<<"sizeof(vector<char>) = "<<sizeof(vector<char>)<<endl;  
 7     cout<<"sizeof(vector<int>) = "<<sizeof(vector<int>)<<endl;  
 8     cout<<"sizeof(vector<short>) = "<<sizeof(vector<short>)<<endl;  
 9     cout<<"sizeof(vector<double>) = "<<sizeof(vector<double>)<<endl;  
10     cout<<"sizeof(vector<long>) = "<<sizeof(vector<long>)<<endl;  
11     cout<<"sizeof(vector<float>) = "<<sizeof(vector<float>)<<endl;  
12     cout<<"sizeof(vector<bool>) = "<<sizeof(vector<bool>)<<endl;  
13     cout<<"sizeof(vector<string>) = "<<sizeof(vector<string>)<<endl;  
14 }  

輸出:

1 sizeof(vector<char>) = 20  
2 sizeof(vector<int>) = 20  
3 sizeof(vector<short>) = 20  
4 sizeof(vector<double>) = 20  
5 sizeof(vector<long>) = 20  
6 sizeof(vector<float>) = 20  
7 sizeof(vector<bool>) = 28  
8 sizeof(vector<string>) = 20  
9 請按任意鍵繼續. . .  

解釋:
vector應該是從堆上分配內存,所有大小與元素個數無關

sizeof(vector)取決於vector類的具體實現,STL是個完全開放的東西,誰都可以來實現vector類。

通過查看STL源碼可以看到vector有四個成員變量 
_A   allocator; 
iterator   _First,   _Last,   _End; 

每個指針是4個字節,因此16字節。20字節的是不是添加了什么指針呢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM