簡體   English   中英

c ++ stl映射存儲和內存使用情況

[英]c++ stl map storage and memory usage

我知道插入新條目時,stl映射將復制構造並存儲值,而不是指針或引用。

但是,我對以下示例代碼感到困惑:

int main( int argc, char** argv ){
    map<int, vector<int> > m;
    for(int i=0;i<10; i++){
        m[i] = vector<int>();
    }
    cout<<sizeof(m)<<endl;
    cout<<m[1].size()<<endl;
    for(map<int, vector<int> >::iterator it=m.begin(); it!=m.end(); it++){
        it->second.push_back(1);
        it->second.push_back(1);
        it->second.push_back(1);
    }
    cout<<sizeof(m)<<endl;
    cout<<m[1].size()<<endl
}

輸出是

48
0 
48  
3

為什么即使我更改地圖的值,地圖的大小也沒有改變?

首先,如果按大小表示地圖中的條目數,則需要使用m.size()而不是sizeof(m) 后者測量std::map對象的大小(以字節為單位),而不是實際條目的存儲位置。 因此,無論您添加多少條目,大小都不會改變。

其次,您的代碼實際上並未向地圖添加任何新條目。 它僅將條目添加到地圖的某些矢量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM