#include
#include
using
namespace
std;
int main()
system("pause");
return
0;}
總結:對比可以發現採用採用成倍方式擴容,可以保證常數的時間複雜度,而增加指定大小的容量只能達到o(n)的時間複雜度,因此,使用成倍的方式擴容。
第二個問題:
vector在push_back以成倍增長可以在均攤後達到o(1)的事件複雜度,相對於增長指定大小的o(n)時間複雜度更好。
為了防止申請記憶體的浪費,現在使用較多的有2倍與1.5倍的增長方式,而1.5倍的增長方式可以更好的實現對記憶體的重複利用,因為更好。 參考
c++ stl中vector記憶體用盡後,為啥每次是兩倍的增長,而不是3倍或其他數值?
《stl系列》之vector原理及實現
vector中push_back操作時間複雜度分析
vector的操作和擴容
vector是一段連續的記憶體空間。start,finish,end of storage三個指標描述了空間狀態,這三個是普通的指標。start到finish是已經使用的記憶體,裡面有元素。finish到end of storage是未使用的記憶體,裡面沒有元素。vectorres m 其空間cap...
ArrayList和Vector擴容機制
直接給原始碼,jdk1.8 private void grow int mincapacity 可以看到,增長是1.5倍。首先來看個建構函式 下圖的建構函式我們可以看到,vector可以設定增長的值。public vector int initialcapacity,int capacityincr...
ArrayList 擴容原理
面試中經常問到的問題之一就是list的擴容機制了,他是怎麼做到擴容的,大家都能答出來底層是陣列,複製乙個陣列來擴容,但是再具體一點來說,大家就不知道該怎麼說了,如果不看原始碼說這麼多確實就差不多了,但是看了原始碼你會說的更多,更詳細,更具體,本篇主要看的是jdk1.8 至於其他版本大同小異,看看就知...