vector中resize()和reserve()的區別


先看看《C++ Primer》中對resize()函數兩種用法的介紹:

1、resize(n) 

調整容器的長度大小,使其能容納n個元素。

如果n小於容器的當前的size,則刪除多出來的元素。

否則,添加采用值初始化的元素。

2、 resize(n,t)

多一個參數t,將所有新添加的元素初始化為t。

 

而reserver()的用法只有一種

reserve(n)

預分配n個元素的存儲空間。

 

了解這兩個函數的區別,首先要搞清楚容器的capacity(容量)與size(長度)的區別。

size指容器當前擁有的元素個數;

而capacity則指容器在必須分配新存儲空間之前可以存儲的元素總數。

也可以說是預分配存儲空間的大小。

 

resize()函數和容器的size息息相關。調用resize(n)后,容器的size即為n。

至於是否影響capacity,取決於調整后的容器的size是否大於capacity。

 

reserve()函數和容器的capacity息息相關。

調用reserve(n)后,若容器的capacity<n,則重新分配內存空間,從而使得capacity等於n。

如果capacity>=n呢?capacity無變化。

 

從兩個函數的用途可以發現,容器調用resize()函數后,所有的空間都已經初始化了,所以可以直接訪問。

而reserve()函數預分配出的空間沒有被初始化,所以不可訪問。

 

一個簡單的測試用例:

        vector<int> a;
 
        a.reserve(100);
        a.resize(50);
        cout<<a.size()<<"  "<<a.capacity()<<endl;
        a.resize(150);
        cout<<a.size()<<"  "<<a.capacity()<<endl;
        a.reserve(50);
        cout<<a.size()<<"  "<<a.capacity()<<endl;
        a.resize(50);
        cout<<a.size()<<"  "<<a.capacity()<<endl;

 


免責聲明!

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



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