Vector擴容

陈浩辉發表於2024-05-31

Vector擴容在Linux平臺下面GCC編譯器擴容的大小是2倍,在VS下擴容大小是1.5倍;
選擇2倍的擴容大小也是因為擴大2的時候,vector的操作可以接近到常數級別的O(1),因為空間變得很大了,基數大了相對的時間複雜度就小了。

但是擴容2倍這樣的話,後面申請的空間是一定會大於之前申請的全部空間,所以之前擴容的空間不能使用,這樣對記憶體並不友好。因此選定的倍數應該是1到2中間,選擇1.5的原因應該是:不至於太浪費記憶體空間,同時也不需要太多次的賦值陣列內容,多次擴容之後,也可以重複使用之前的空間。

vector的記憶體空間只增不減,vector記憶體的回收只能靠vector呼叫解構函式的時候才被系統收回,當然也可以使用swap來幫你釋放記憶體,具體方法: vec.swap(vec);

相關文章