1. 程式人生 > >vector容器中resize與reserve的區別

vector容器中resize與reserve的區別

Vector中的resize()reserve()的區別

我用的是VS2013編譯器 首先申明resize()和reserve()這兩個成員函式都是Vector的公有成員函式(public  member function) 一、先了解vector容器的基本構成:
1.首先明白vector是一種順序容器(申請的內部空間是連續的:類似陣列) 2.它的底層是由類模板實現的 3.vector的基本模板:   template<class T> class vector {   public:     vector() {};    ~vector() {}; ...   protected:
T* _arr;//vector的內部命名 size_t _sz;//記錄該陣列_arr中儲存的有效資料的個數 size_t _capacity;//記錄該陣列_arr開闢的總空間大小
};
4.stl庫中英文版詳解:(如下圖)


二、這兩個成員函式的意義: resize():重新申請並改變當前vector物件的有效空間大小 reserve():重新申請並改變當前vector物件的總空間(_capacity)大小

三、單獨講解resize()和reserve()
1、resize() 該函式的模板: void  resize(size_t sz,T c=T());   1.總的來講:resize()就是重新申請有效空間的大小;
2.再用運該函式的時候最多可以有兩個引數,至少要有一個引數(sz:表示你要申請多少有效元素空間的個數)
3.第一個引數sz:代表的是當前要申請的有效元素的個數; 4.第二個引數c:代表的是給這sz個有效空間賦一個初始值(預設為T()(T()表示當T為什麼型別時,c就是什麼型別的預設值eg:T為int  則:T()為0,T為char 則:T()為‘\0’)) 5.該函式可以直接由vector的物件呼叫 6.該函式無返回值
vector中resize()應用的舉例:


由上述例子總結: 1.resize()可以改變有效空間的大小;  2.resize()有改變預設值的功能,但該改變的範圍是有限制的 這個範圍是當前設定的sz範圍內
3.當新設定的sz值大於之前的sz時,預設引數只作用於多開闢的那些空間 4.當resize的sz(size())改變時capacity的大小也會隨著改變,但是當reserve()改變capacity的大小後,size()的大小並不會隨之改變它仍然保持的是原來有效元素的個數; 2、reserve() 該函式的模板: void reserve(size_t n); 1.與resize()函式最直接的區別是:reserve()只有一個引數; 2.reserve()中的引數n改變的是總空間(_capacity)的大小;(注意:他開闢出來的n 個空間並不代表就都是有效空間,只有size()大小的空間才是有效空間) 3.該函式無返回值
vector中reserve()應用的舉例:


另附:(目的:熟悉一下list 中有那些介面) List(連結串列)(簡講)


list中沒有reserve(),但是有resize();