vecotr是動態陣列,顧名思義他可以動態的增加自己的長度。
但是怎樣的增加自己的長度?
vector有兩個函式乙個是capacity()返回記憶體空間即緩衝區的大小,另乙個是size()返回當前陣列中數的數量。vector增加元素來說,當容量已經不能放進資料了,那麼他會重新申請一塊記憶體,把之前的記憶體利用複製建構函式複製到新的記憶體當中,然後把新新增的內容放入後面,另外此時的他申請的記憶體空間是原來空間的2倍,我測得是2倍
緩衝區的釋放
vecotor占用的記憶體只增不減,erase只是將一段區間( earse(arr.begin(), arr.end() )的值清除掉或者將某個值( erase(x) )清除掉,但是對於記憶體空間來說是沒變化的
所有記憶體空間是在vector析構時候才能被系統**。empty()用來檢測容器是否為空的,clear()可以清空所有元素。但是即使clear(),vector所占用的記憶體空間依然如故,無法保證記憶體的**。
效能分析:方法一:
vecotr()
.swap
(arr)
// **arr記憶體
方法二:
模板:template <
class
t>
void
clearvector
( vector< t >
& vt )
呼叫模板函式
void clearvector
& vt)
//臨時變數會被析構,temp呼叫vector析構函式釋放空間
主要比較三種插入方式:
1、直接push_back() 2、 reserve(n) 預定n個空間,當然後續push_back()會增加,其中的值不確定, 3 resize(n, x) 申請n個空間初始化為x,
reserve只是保持乙個最小的空間大小,而resize則是對緩衝區進行重新分配,裡面涉及到的判斷和記憶體處理比較多所以比reserve慢一些,對於資料數目可以確定的時候,先預設空間大小是很有必要的。直接push_back資料頻繁移動很是耗時
C STL中的vector的記憶體分配與釋放
1.vector的記憶體增長 vector其中乙個特點 記憶體空間只會增長,不會減小,援引c primer 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空間 拷貝元素 ...
C STL中的vector的記憶體分配與釋放
1.vector的記憶體增長 vector其中乙個特點 記憶體空間只會增長,不會減小,援引c primer 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空間 拷貝元素 ...
C STL中的vector的記憶體分配與釋放
1.vector的記憶體增長 vector其中乙個特點 記憶體空間只會增長,不會減小,援引c primer 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空間 拷貝元素 ...