C STL中vector的使用方法

2021-06-22 23:03:01 字數 3387 閱讀 9966

使用vector需要包含標頭檔案

#include

一、定義和初始化

vector

v0;

vector

v1(5);//

初始化大小至少為5,實際capacity可能會稍大一點

vector

v1a(6,'x');//

初始化大小為6,各元素初始值為'x'

vector

v2(v1a);//

構造乙個vector,其capacity==vla.size(),元素和v1a完全一樣

char hello="hello";

vector

v3(hello, hello+5);//hello+5

指向需要拷貝的最後乙個元素的下乙個位置

vector

v4(2);//

會呼叫類ip的無引數建構函式來構造ip型別的物件 new ip()

二、遍歷vector

接上面的定義。

for(vector

::iterator itr = v1.begin();itr!=v1.end(); itr++)

for(int i = 0; i 迴圈0次,因為size為0

cout<< v1[i];

}for(int i = 0; i cout<< v2[i];//

輸出****** }

for(int i = 0; i cout<< v3[i];//

輸出hello

}  

cout <"."

<"."

<"."

輸出255.255.255.255

,ip()中會賦值d1=d2=d3=d4=255

三、增加、賦/取值

vector

v0;

v0.push_back(『a』);//增加元素到尾部,可能引起vector容量的增加

v0.push_back('b');

v0.push_back('c');

v0[2] = 'x';//

若下標越界,則為丟擲異常

cout 若下標越界,則為丟擲異常

char str = "1234";

v0.insert(v0.begin()+ 2, str, str + 4);//

在v0[2]之前插入1234; v0 = ab1234x

v0.insert(v0.begin(),2, '1');//

在v0[0]之前插入11;v0=11ab1234x

v0.insert(v0.begin(),'0'); //

在v0[0]之之前插入0;v0=011ab1234x

四、刪除

vector

v0;

v0.push_back('a');

v0.push_back('b');

v0.push_back('c');

v0.push_back('d');

v0.push_back('e');//v0=abcde

v0.pop_back();//

刪除最後乙個元素,該函式沒有返回值;v0=abcd

vector

::iterator itr0 = v0.begin() +1;

itr0 =v0.erase(itr0);//

刪除itr0指向元素,之後返回指向被刪除元素下一位置,itr0變為無效迭代器,再使用則報vector iterators incompatible異常;v0 = acd

itr0 =v0.erase(itr0, v0.end()); //

刪除[itr0, end)之間的元素,之後返回指向被刪除最後的元素下一位置,這裡是end

v0.clear(); //

清空所有元素

五、獲取狀態

vector

v0;

v0.push_back('a');

v0.push_back('b');

v0.push_back('c');

boolflag = v0.empty();//判斷是否為空

int num = v0.size();//元素個數

intcapa = v0.capacity();//總容量大小,即可以放多少個元素

v0.resize(100);//改變size大小。若新容量值nv0.reserve(100);//確保以後呼叫capacity時,返回值》=100

六、記憶體分配問題

1)保留記憶體

假定你想建立乙個容納1-1000值的vector:

vectorv;

for (int i = 1; i <= 1000; ++i)

v.push_back(i);

在大多數stl實現中,這段**在迴圈過程中將會導致2到10次重新分配。因為vector在重新分配發生時一般把容量翻倍。所以,這種做法的開銷很大。

當可預先估計所需容量時,可以為vector保留足夠大小的容量,以免重新分配帶來的開銷。可以這樣做:

vectorv(1000);

for(int i = 1; i <= 1000; ++i) v.push_back(i);

或者vectorv;

v.reserve(1000);//保留1000個元素的儲存空間

for(int i = 1; i <= 1000; ++i) v.push_back(i);

第一種方法直接在構造時就保留了至少1000個儲存單元,第二種方法會引起1次記憶體重新分配,因為建議用第一種方法。

2)收縮記憶體

如果需要收縮vector v的記憶體到恰好足夠實際元素存放的大小,可呼叫

vector(v).swap(v);

該語句首先構造乙個臨時的vector物件,該物件的capacity大小,只夠存放v的所有元素,並且元素與v相同。然後,將臨時物件和v的儲存進行交換。之時,v就沒有多餘的儲存空間了。語句執行完後,臨時物件被釋放。該語句的執行需要一定的時間開銷。

3)完全釋放記憶體

vectorv;

v.clear();//capacity不變,size變成0

vector().swap(v);//capacity變成0

七、位址失效問題

v.insert(itr,『2』);

v.erase(itr);

insert和erase發生位置之後的迭代器均會失效,在上面的例子中,原來指向itr之後元素的迭代器均會失效。

C STL之vector的使用

1.vector是表示可變大小陣列的序列容器。2.就像陣列一樣,vector也採用的連續儲存空間來儲存元素。也就是意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效。但是又不像陣列,它的大小是可以動態改變的,而且它的大小會被容器自動處理。3.本質講,vector使用動態分配陣列來儲存它的...

C STL中的容器 Vector

c stl中的verctor好比是c語言中的陣列,但是vector又具有陣列沒有的一些高階功能。與陣列相比,vector就是乙個可以不用再初始化就必須制定大小的邊長陣列,當然了,它還有許多高階功能。要想用vector首先得包含標頭檔案vector。如果vector的元素型別是int,預設初始化為0 ...

C STL中vector的用法

vectorvec。這樣就定義好了定義了乙個名為vec的儲存t型別資料的動態陣列。其中t是我們陣列要儲存的資料型別,可以是int float double c vector方法總結 方法功能 push back 在末尾加入乙個元素 pop back 在末尾彈出乙個元素 size 獲取長度 clear...