看黑板:
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中定義物件時初始化了幾...