stl vector 容量與大小之間的關係

2021-10-04 08:48:32 字數 852 閱讀 5731

當對vector進行push_back等操作的時候,當超出之前記憶體所分配的部分之後,需要新增記憶體空間存放更多元素。將原來的資料複製過來,釋放之前的記憶體,然後插入新增加的元素;那麼這個過程是怎麼樣的呢?我們用**來試一下:

vs2013環境下如下:

#include#includeusing namespace std;

int main()

system("pause");

return 0;

}

結果如下:

之後就是vector中reserve()和resize()函式的區別了:

reserve:分配空間,更改capacity()但是不改變size()。也就是容量分配了,但是元素個數仍然不變。

resize:分配空間,同時改變capacity()和size()。也就是容量分配了,元素個數和值也被分配。

具體解釋是:

1) reserve()函式只是預留空間大小,並沒有實際建立元素,所以無法訪問其中的元素,此時vector的容量等於預留空間的大小,size為0;需要用push_back()/insert()函式插入元素。

2) resize()分配空間的同時實際建立元素,需要制定每個元素的值。此時vector的容量等於size,可以引用其中的元素(用operator操作符,或者用迭代器來引用元素物件)。

3)二者的函式形式有區別:reserve接收乙個引數,表示預留空間的大小;resize可以接收兩個引數:分配空間的大小和要加入的新元素的值,如果第二個引數被省略,那麼就呼叫元素物件的預設建構函式。

STL Vector容量問題

1 clear,erase pop back 函式只刪除物件,並沒有釋放vec中的記憶體,若物件是指標還需要delete 2 在erase,clear,pop back 刪除物件的後,size改變,capacity保持不變,所以push back也是在capacity範圍內進行插入新物件,當插入的資...

vector大小與容量的關係

vector優異效能的秘訣之一,就是配置比其所容納的元素所需更多的記憶體。vector中的函式capacity 返回vector實際能夠容納的元素數量,如果超出這個數量,vector就會重新配置內部儲存器。一旦記憶體重新分配,和vector相關的所有引用 迭代器 指標都會失效,而重新分配這些有很耗時...

vector容器06之容量和大小

函式原型 vector的容量和大小 void print vector int v cout endl void test else 重新指定大小 v.resize 10 520 利用過載版本,可以指定預設填充值 引數2 print v 如果重新指定的比原來長了,預設用0填充新位置 cout 改變大...