在使用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呢?還需要自己深入探索再來揭示答案。