stl vector 記憶體管理

2021-07-04 06:13:49 字數 531 閱讀 3708

size是指容器當前擁有元素的個數,而capacity是指容器在必須分配新的儲存空間之前可以存放的元素總數。如vectorivect(10),ivect.capacity()=10,ivect.size()=0,當你向ivect中插入元素時,只要沒有超過十個,那麼capacity就不變,而size為你插入的元素的個數。當你插入第十個時,capacity=size=10,當再插入乙個,即第十乙個資料時,容器重新分配儲存空間:ivect.capacity()=20,而ivect.size()=11,即容器重新分配空間的話是現有空間的2倍進行分配,以保證vector的效率。

所謂的vector的大小的動態增長,並不是在原空間之後連續新空間(因為無法保證原空間之後尚有可供配置的空間)。而是以原來大小的兩倍

另外配置一塊較大空間,然後將原內容拷貝過來,然後才開始在原內容之後構造新元素,並釋放原空間。因此,對vector的任何操作一旦引起重新配置,指向原vector的所有迭代器就都失效了。這就是為什麼《c++ primer》中說push_back和inser可能會使迭代器失效的原因。其本質是:空間已進行重新配置。

STL vector記憶體分配

標籤 c stlvector 記憶體 2013 12 15 19 57 3708人閱讀收藏 舉報 stl 10 作者同類文章x 在stl的容器中,vector可以說是最容易理解和使用的容器了,以前使用陣列的時候,如果不確定有多少資料要儲存,就會預先分配乙個大的陣列,如果實際沒有用到那麼多,又會浪費很...

STL Vector記憶體機制

vector可以看作是乙個動態陣列,其記憶體是連續的,並具有以下特性 1 vector中的size表示當前實際資料數量,capacity 則表示當前可容納的數量,即已開闢的記憶體。2 釋放 pop back 刪除 erase 和 清空 clear 只會改變size,不會改變capacity 只有在v...

stl vector記憶體分配

1 呼叫push back時,其內部的記憶體分配是如何進行的?2 呼叫clear時,內部是如何具體實現的?若想將其記憶體釋放,該如何操作?vector的工作原理是系統預先分配一塊capacity大小的空間,當插入的資料超過這個空間的時候,這塊空間會讓某種方式擴充套件,但是你刪除資料的時候,它卻不會縮...