STL總結之 vector容器

2021-10-10 20:23:11 字數 2082 閱讀 6115

看黑板:

vector,向量,封裝了陣列。內部實為乙個指標指向一塊連續的空間,當空間被放滿時,會自動申請一塊更大的空間,將原有的所有資料拷貝過來,並將上一塊空間釋放掉。由於是一塊連續的空間,故可以用下標訪問的方式進行隨機訪問。

若專案中需要進行高頻率的訪問,則可以優先考慮vector。

常用函式:

1、尾部新增元素:

vector.

push_back()

;

2.尾部刪除元素:

vector.

pop_back()

;

3.兩資料進行交換:

vector.

swap()

;

4.清空元素:

vector.

clear()

;

5.刪除指定元素:

vector.

erase

(i);

6.vector大小:

vector.

size()

;

7.vector所佔記憶體實際大小:

vector.

capacity()

;

8.下標訪問:

vector[i]

;

9.at方法訪問:

vector.

at(i)

;// at方法若訪問越界會丟擲異常

10.訪問第乙個元素:

vector.

front()

;

11.訪問最後乙個元素:

vector.

back()

;

12.vector開始指標:

vector.

begin()

;

13.vector尾部指標:

vector.

end(

);

訪問:

除了使用下標來訪問 vector 物件的元素外,標準庫還提供了另一種訪問元素的方法:使用迭代器(iterator) 。迭代器是一種檢查容器內元素並遍歷元素的資料型別。實際上,我們定義的vector 物件就相當於是陣列,而迭代器就相當於指標。就很好理解!

如:

vector<

int>

::iterator iter;

因為vector的插入操作可能造成記憶體重新配置,導致原有的迭代器全部失效,所以要特別注意vector的迭代器失效問題!!

迭代器失效具體原因:

因為順序容器記憶體是連續分配(分配乙個陣列作為記憶體),刪除乙個元素導致後面所有的元素會向前移動乙個位置。(刪除了乙個元素,該元素後面的所有元素都要挪位置,所以,iter++,已經指向的是未知記憶體)。

所以對vector的任何操作,一旦引起控制項重新配置,指向原vector的所有迭代器就都失效了。

解決方法:

vector<

int>

::iterator iter;

for(iter = vec.

begin()

; iter != vec.

end();

)else

}

閒話:

我們現在知道vector會出現迭代器失效問題,那麼其他stl容器是否也有一樣的問題呢?後面的部落格—《stl專欄》將會逐一進行總結。

分享也是自己對問題再次加深理解的方式,可能不全面,但絕對有用,後面將不斷完善~

STL 之vector向量容器

vector向量容器 作為陣列的乙個泛化推廣的vector容器,不僅可以陣列一樣的元素隨機訪問,還可以在容器的尾端插入新元素 vector是乙個簡單,高效的容器,在尾端插入和刪除元素,演算法時間複雜度為o 1 常數階,其他元素的插入和刪除為o n 的線性階,其中n為容器的元素個數,vector具有自...

STL系列之vector 容器

標頭檔案 使用vector,必須包含標頭檔案 includevector v vector v 3,1 初始化放入3個1 vector vpointer vector vpointer st test可以是使用者定義的任意結構體或類等資料型別int ponit new int for int i 0...

STL順序容器陣列之vector

向量 動態陣列 標頭檔案 include vectorvec 中放資料型別,vec是變數名 vector vec1 5 乙個大小為5的陣列 vector vec2 5,12 乙個大小為5的陣列,以12填充 定義示例 vector iterator ite 在codeblocks中定義物件時初始化了幾...