vector大小與容量的關係

2021-06-28 09:50:37 字數 941 閱讀 6427

vector優異效能的秘訣之一,就是配置比其所容納的元素所需更多的記憶體。

vector中的函式capacity()返回vector實際能夠容納的元素數量,如果超出這個數量,vector就會重新配置內部儲存器。一旦記憶體重新分配,和vector相關的所有引用、迭代器、指標都會失效,而重新分配這些有很耗時間,所以如果需要速度的場景下,vector容量需要考慮。

可以使用reserve()來保留適當容量,避免重新分配。也可以在初始化期間向建構函式傳遞附加引數,構造足夠空間,但是如果型別本身很複雜,構造也會特別耗時間,所以如果只是保留記憶體,建議用reserve()。

如果呼叫reserve()所給引數比當前vector容量小,則不會有任何反應。

另外很多實現,就算你只插入1個元素,也會分配一段記憶體,如果大量vector只有零散元素,則會比較浪費記憶體。在vs2005下實驗以下**,由此也可看出不同平台有不同實現規律

std::vectorvec_int(1024);

int capa = vec_int.capacity(); // 1024

vec_int.push_back(1);

capa = vec_int.capacity(); //1536 增加了512個整型空間,2k位元組

std::vectorvec_int(128);

int capa = vec_int.capacity();//128

vec_int.push_back(1);

capa = vec_int.capacity();//192 增加64個整型空間

最後,vector迭代器持續有效,除非發生兩種情況:1、使用者在乙個較少位置插入和移除元素;2、由於容量變化而重新分配記憶體。

​當然,刪除某個元素後,再使用原來的迭代器是危險的(在vs2005除錯版本會丟擲異常),需要避免這樣使用,應該使用erase返回的迭代器。還有,對於插入某個元素,更是有可能因重新分配空間導致迭代器等失效。

vector 容量和大小

include using namespace std include void printvecotr vector v cout endl vector容量的和大小操作 void test01 printvecotr v1 if v1.empty 如果為真代表數為空 else 重新指定大小 v1...

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

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

C 學習紀錄 vector容器 容量與大小

1 empty 判斷容器是否為空。為空返回真,不為空返回假。2 capacity 返回容器的容量 3 size 返回容器中元素的個數。元素個數不一定等於容器容量。4 resize int num 重新指定容器的長度為num。若容器變長,以預設值0填充新位置。如果容器變短,則末尾超出容器長度的元素被刪...