1. 程式人生 > >vector中resize和reserve的區別

vector中resize和reserve的區別

art [] 形式 new ack insert 改變 元素 叠代

vector的resize()和reserve()函數的區別

reserve是容器預留空間,但並不真正創建元素對象,在創建對象之前,不能引用容器內的元素,因此當加入新的元素時,需要用push_back()/insert()函數。

resize是改變容器的大小,並且創建對象,因此,調用這個函數之後,就可以引用容器內的對象了,因此當加入新的元素時,用operator[]操作符,或者用叠代器來引用元素對象。

再者,兩個函數的形式是有區別的,reserve函數之後一個參數,即需要預留的容器的空間;resize函數可以有兩個參數,第一個參數是容器新的大小,第二個參數是要加入容器中的新元素,如果這個參數被省略,那麽就調用元素對象的默認構造函數。下面是這兩個函數使用例子:

vector<int> myVec;

myVec.reserve( 100 ); // 新元素還沒有構造,

// 此時不能用[]訪問元素

for (int i = 0; i < 100; i++ )

{

myVec.push_back( i ); //新元素這時才構造

}

myVec.resize( 102 ); // 用元素的默認構造函數構造了兩個新的元素

myVec[100] = 1; //直接操作新元素

myVec[101] = 2;

vector中resize和reserve的區別