我很好奇並在某些C++標準庫類上應用sizeof()
運算符。以下是我觀察到:sizeof()在C++標準庫
int main()
{
vector<double> v1;
set<double> s1;
map<double,double> m1;
stack<char> st;
queue<char> q;
vector<char> v2;
set<char> s2;
map<char,char> m2;
cout<<sizeof(v1)<<" "<<sizeof(s1)<<" "<<sizeof(m1)<<endl;
cout<<sizeof(v2)<<" "<<sizeof(s2)<<" "<<sizeof(m2)<<endl;
cout<<sizeof(q)<<" "<<sizeof(st)<<endl;
return 0;
}
我的系統(64位)上的輸出是:
12 24 24
12 24 24
40 40
我知道std::set
採用紅黑樹的實現。因此,二叉樹的每個節點都有兩個指針(每個8個字節),值(8個字節,共24個)似乎沒問題。
std::map
(同樣採用紅黑樹)有一個額外的鑰匙,但還是24個字節?爲什麼?爲什麼
std::queue
和std::stack
需要40個字節,而std::vector
只需要12個字節?爲什麼
char
和double
不影響類的大小?是因爲模板嗎?
'sizeof'不是一個函數,而是一個在C++語言中定義的運算符和關鍵字。 –
@BasileStarynkevitch我更新了問題 – banarun
爲什麼你會期望'sizeof(container)== sizeof(node)'? –