C++ STL中vector操作的.size和sizeof區別


  在使用vector時,涉及到了統計vector的元素個數,本應該使用.size(),但一開始由於記錯用法了,犯了個很低級的錯誤,竟然使用了sizeof。后來竟然發現一個奇妙的地方。int型數據的大小是4,本以為會輸出10和40,或者是10和4,但事實輸出的是10和16!!!

1 ector<int> res_int1(10, 1); 2 cout << res_int1.size() << "    " << sizeof(res_int1) << endl; 

  然后調整了一下元素的個數,繼續探索。這次的輸出,100和16。

1 vector<int> res_int2(100, 1); 2 cout << res_int2.size() << "    " << sizeof(res_int2) << endl; 

  接下來調整了一下數據類型,繼續探索。這次的輸出也是10和16。

1 vector<char> res_char(10, 'a'); 2 cout << res_char.size() << "    " << sizeof(res_char); 

  由此可以看出:sizeof()的結果和vector里面元素的個數無關。

  然后換了布爾類型,又發現奇妙的地方。這次的結果不是10和16,而是10和24!!!!!

1 vector<bool> res_bool(10, true); 2 cout << res_bool.size() << "    " << sizeof(res_bool); 

  為什么有的類型是16,有的是24 ??

  sizeof()運算符的值在編譯時即計算好,它的功能是獲取所建立的最大對象的字節大小,由於在編譯時計算,因此sizeof不能用來返回動態分配的內存空間的大小。而vector動態分配內存,所以應該是從堆上獲取內存,所以vector的大小與元素個數無關。

vector容器包含三個指針:_First,   _Last,   _End,如果再算上 iterator的話,4*4=16。

  但是為什么有的是24呢?還需要自己深入探索再來揭示答案。 


免責聲明!

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



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