如何避免vector容器進行不必要的擴容

2021-10-12 16:35:31 字數 933 閱讀 1091

1、分配一塊大小是當前 vector 容量幾倍的新儲存空間。注意,多數 stl 版本中的 vector 容器,其容器都會以 2 的倍數增長,也就是說,每次 vector 容器擴容,它們的容量都會提高到之前的 2 倍;

2、將 vector 容器儲存的所有元素,依照原有次序從舊的儲存空間複製到新的儲存空間中;

3、析構掉舊儲存空間中儲存的所有元素;

4、釋放舊的儲存空間。

通過以上分析不難看出,vector 容器的擴容過程是非常耗時的,並且當容器進行擴容後,之前和該容器相關的所有指標、迭代器以及引用都會失效。因此在使用 vector 容器過程中,我們應盡量避免執行不必要的擴容操作。

只要有新元素要新增到 vector 容器中而恰好此時 vector 容器的容量不足時,該容器就會自動擴容。因此,避免 vector 容器執行不必要的擴容操作的關鍵在於,在使用 vector 容器初期,就要將其容量設為足夠大的值。換句話說,在 vector 容器剛剛構造出來的那一刻,就應該借助 reserve() 成員方法為其擴充足夠大的容量。

反例:

vector<

int>myvector;

for(

int i =

1; i <=

1000

; i++

)//需要2^n > 1000 n次擴容

正例:

vector<

int>myvector;

myvector.

reserve

(1000);

//一次擴容

cout << myvector.

capacity()

;for

(int i =

1; i <=

1000

; i++

)//無需擴容

對一組整數進行操作 使用vector容器的方法

讀入一組整數並把它們存入乙個vector物件,對其進行以下操作,並輸出結果。include include using namespace std intmain 每對相鄰整數的和輸出出來 for decltype number.size ix 0 ix number.size ix ix 2 co...

如何使用docker對容器資源進行限制

在伺服器當中,假設iis服務部署多個站點,那麼只要其中乙個站點出問題,假設是cpu100 或者是記憶體爆滿,那麼這台伺服器上的其他站點都會跟著掛掉。同樣在使用容器時,單台主機上可能會跑幾十個容器,容器雖然都相互隔離,但是用的卻是與宿主機相同的核心,cpu 記憶體 磁碟等硬體資源。如果不對容器資源進行...

PostgreSQL 如何進行「不區分大小寫」查詢

本文翻譯自 postgresql how to make case insensitive query is there any way to write case insensitive queries in postgresql,eg i want that following 3 querie...