STL之vector

我是linux ,在個人電腦中,vector的代碼位於/usr/include/c++/4.4.4/bits/stl_vector.h, vector.tcclinux

先歸納細節:c++

  1. vector還是基本數組,也就是一個連續的內存塊。
  2. 經過複製構造,opernator=函數來實現深複製,經過析構函數回收基本數組。
  3. 能夠用resize來改變大小
  4. 提供operator[]來訪問和修改內容

vector的實現是算法

它在stl_vector.h 中定義了一個數組

 

  _Vector_impl _M_impl;

 

 

 _Vector_impl的三個對象分別是數組的起始地址_M_start,  結束地址,還有vector容器的結束地址函數

 

 

 

 

由於有保留內存的存在。因此往vector裏添加數據時,若是還有保留空間。就能夠簡單地將數據放入vector3d

 

 

當你試圖去把一個元素插入內存已經滿了的vector時,這個vector會分配具備更多 容量的新內存,從舊內存把它的元素拷貝到新內存,銷燬舊內存裏的元素,回收舊內存。而後它添加插入的元素.code

例如對象

 

vector 重載了operator[],因此它雖然是一個類,但卻能夠像原生數組同樣的用[]來訪問。如data[3]blog

 

 

從這裏也能夠看到,迭代算法中的內存是連續的。內存

相關文章
相關標籤/搜索