STLvector的實現https://www.cnblogs.com/Braveliu/p/6264543.html
vector使用注意事項及原因https://www.cnblogs.com/simonote/p/9265374.html
vector中push_back()擴充機制https://www.cnblogs.com/yocichen/p/10574819.html
- vector就是一個動態增長的數組,裏面有一個指針指向一片連續的空間,當空間裝不下的時候,會申請一片更大的空間,將原來的數據拷貝過去,並釋放原來的舊空間。當刪除的時候空間並不會被釋放,只是清空了裏面的數據。對比array是靜態空間一旦配置了就不能改變大小。
- vector的動態增加大小的時候,並不是在原有的空間上持續新的空間(無法保證原空間的後面還有可供配置的空間),而是以原大小的兩倍另外配置一塊較大的空間,然後將原內容拷貝過來,並釋放原空間。在VS下是1.5倍擴容,在GCC下是2倍擴容。
- vector,pushback觸發擴容一定是增長兩倍,insert觸發的擴容 oldsize+max(oldsize,n)。oldsize是已經用的大小(不是可用大小),n是新插入元素個數
- 存到vector裏的數據是在棧上還是堆上?
vector中的空間都是通過分配器獲得的,分配器又是通過operator new -> malloc 分配空間的,所以vector存儲的元素都是在堆上