vector中resize和reserve的區別
阿新 • • 發佈:2019-05-12
art [] 形式 new ack insert 改變 元素 叠代
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()函數的區別
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的區別