STL 向量vector詳解

2021-07-27 21:28:42 字數 1341 閱讀 8179

vector是stl中最常見的容器,它是一種順序容器,支援隨機訪問。 vector是一塊連續分配的記憶體,從資料安排的角度來講,和陣列極其相似, 不同的地方就是:陣列是靜態分配空間,一旦分配了空間的大小,就不可再改變了; 而vector是動態分配空間,隨著元素的不斷插入,它會按照自身的一套機制不斷擴充自身的容量。

vector的擴充機制:按照容器現在容量的一倍進行增長。 vector容器分配的是一塊連續的記憶體空間,每次容器的增長,並不是在原有連續的記憶體空間後再進行簡單的疊加, 而是重新申請一塊更大的新記憶體,並把現有容器中的元素逐個複製過去,然後銷毀舊的記憶體。 這時原有指向舊記憶體空間的迭代器已經失效,所以當操作容器時,迭代器要及時更新

vector相對於陣列來說略慢,在演算法競賽中應當酌情使用

標頭檔案:#include

命名空間:using namespace std;

1,定義和初始化

#include#includeusing namespace std;

int main()

2,常用操作

#include#includeusing namespace std;

int main()

{ vectorv;

v.push_back(1); //向v末尾新增元素

cout<::iterator it;

for(it=v.begin();it!=v.end();it++) //迭代遍歷

cout<<*itcout<<(v2>v)<

3,其他用法

#include#includeusing namespace std;

int main()

{ vectora,b;

a.reserve(100); //申請記憶體空間,如果小於目前空間則無效,反之擴大到n

cout<::reverse_iterator rit; //你像迭代

for(rit=b.rbegin();rit!=b.rend();rit++)

cout<<*rit<

由於vector內存在開支時是成倍增長,造成大量的記憶體浪費,所以需要對記憶體進行收縮整理,注意 clear函式並不能真正清空記憶體

using namespace std;

int main()

{ vectora,b;

a.reserve(100);

for(int i=0;i<10;i++)

a[i]=i;

vector(a).swap(a); //強制將記憶體收縮到當前大小

cout<().swap(a); //強制清除所有記憶體

cout<

STL 之vector向量容器

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

STL(六)Vector向量容器

作為陣列的乙個泛化推廣的vector容器,vector是一種簡單 高效的容器。在尾端插入和刪除元素,演算法時間複雜度為o 1 常數階,其他元素的插入和刪除為o n 線性階,其中n為vector容器的元素個數。vector具有自動的記憶體管理功能,對於元素的插入和刪除,可動態調整所占用的記憶體空間。一...

STL中的向量 vector

向量 vector 是乙個封裝了動態大小陣列的順序容器 sequence container 跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是乙個能夠存放任意型別的動態陣列。當程式設計師無法知道自己需要的陣列的規模多大時,用 vector 來解決問題可以達到最大節約空間的目的...