11.STL中vector的實現 、vector使用的注意點及其原因,頻繁對vector調用push_back()對性能的影響和原因

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存儲的元素都是在堆上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章