vector容器的動態分配空間

2021-10-03 09:46:54 字數 1029 閱讀 5230

vector容器的底層實現基於陣列,裡面封裝了大量高效的方法,可以完美取代掉陣列。整個容器的核心實際上就是動態分配記憶體,也是其效能優於陣列的重要原因。下面重點解析它的核心函式push_back函式:

當陣列中增加乙個元素x的時候,先判斷是否還有備用空間;如果還有備用空間,則將當前指標的值設為x,並將當前的指標加1;若備用空間已經用完,如果之前的空間為0,則重新分配大小為1的空間,否則將空間擴容為之前的兩倍,然後將舊容器中的值重新拷貝到新空間中,並重新分配起始指標和當前指標。所以使用vector需要注意的一點就是盡量不要動態給它分配空間。而且空間重新分配之後,之前的所有指標都會失效(特別要注意)

vector擴容機制取決於編譯器型別:vs2015-----1.5倍擴容;g++編譯器-------2倍擴容

具體實現:

void push_back(const t& x) 

else

insert_aux(end(), x);

}template void vector::insert_aux(iterator position, const t& x)

else

# ifdef __stl_use_exceptions

catch(...)

# endif /* __stl_use_exceptions */

destroy(begin(), end()); //將舊陣列的空間釋放掉

deallocate();

start = new_start; //new_start記錄新陣列的起始位置

finish = new_finish; //重新設定當前水位的指標

end_of_storage = new_start + len; //設定新陣列的容量

}}

[1]《stl原始碼分析》----侯捷

[2]《stl3.0原始碼》

儲存空間動態分配

ansi c說明了三個用於儲存空間動態分配的函式 1 malloc 分配指定位元組數的儲存區。此儲存區中的初始值不確定 2 calloc 為指定長度的物件,分配能容納其指定個數的儲存空間。該空間中的每一位 bit 都初始化為0 3 realloc 更改以前分配區的長度 增加或減少 當增加長度時,可能...

mallco動態分配 malloc動態分配多維陣列

下面試自己寫的三個測試程式,如果看懂了基本上動態分配多維陣列就沒什麼問題啦 重點 1 深刻理解多維陣列的概念,多維陣列在記憶體中的分配情況,基本上動態分配也沒什麼問題的。然後還要注意一點的就是,釋放是分配的逆過程!include include include void main void int ...

C語言如何動態分配空間 malloc

一般的變數在定義是就要確定大小,但是有的時候不知道使用者的需要,就比如說排序,你不知道使用者想要給幾個數排序,所以為了保險起見往往是定義乙個很大的變數,而實際上使用者可能只需要給5個數排序,你卻int k 1024 來存放要排序的數,造成極大的浪費。這裡介紹乙個函式用於動態分配空間 malloc 原...