使用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...