vector,是同一型別的物件的集合,這一集合可看作可變大小的陣列,是容器的一種。
對於容器來說,其重要特性之一便是於可以在執行時高效地新增元素。
類似於陣列,vector採用連續記憶體位址來儲存元素,因此vector屬於順序容器。也就意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效;同時它比陣列更加靈活,它的大小(size)是可以動態改變的,且它的大小會被容器自動處理。
在這裡應理解好size與capacity之間的關係,這將有助於理解vec.resize()與vec.reserve()的區別:
與其它動態序列容器相比(deques, lists and forward_lists), vector在訪問元素的時候更加高效,在末尾新增和刪除元素相對高效。對於其它不在末尾的刪除和插入操作,效率更低。比起lists和forward_lists統一的迭代器和引用更好。
#include
(1)不帶引數的建構函式初始化
(2)帶引數的建構函式初始化// 初始化乙個size為0的vector
vectorvec;
僅指定vector大小,此時每個元素值為預設值0
vectorvec(10); //初始化了10個預設值為0的元素,呼叫預設建構函式來初始化向量中元素
指定vector大小和元素初始值
(3)通過同型別的vector初始化vectorvec(10, 1); //初始化了10個值為1的元素
// 或是
vectorvec = ; //初始化了1,2,3這3個元素
通常來說,前三種便足夠我們平時使用了。vectortemp(5,1);
// 通過temp容器初始化乙個元素相同的vec向量
vectorvec(temp);
(4)通過陣列位址初始化
(5)通過insert函式初始化int a[5] = ;
// 以陣列a的元素初始化vector,注意位址是從0到5(左閉右開區間)
vectorvec(a, a+5);
vectortemp =;
vectorvec(temp.begin(),temp.begin+3); //定義了vec值為temp中第0個到第2個(共3個)元素
使用同型別的vector以及insert函式初始化
使用陣列以及insert函式初始化// insert初始化方式將同型別的迭代器對應的始末區間(左閉右開區間)內的值插入到vector中
vectortemp(6,6);
vectotvec;
// 將temp[0]~a[2]插入到vec中,vec.size()由0變為3
vec.insert(vec.begin(), temp.begin(), temp.begin() + 3);
通過insert函式新增m個值為n的元素int a[6] = ;
vectorvec;
// 將a的所有元素插入到vec中
vec.insert(vec.begin(), a, a+7);
(6)通過copy函式賦值// 在vec開始位置處插入6個1
vec.insert(vec.begin(), 6, 1);
vectorvec(5,1);
int a[5] = ;
vectortarget(10);//copy通過普通輸出迭代子複製時,必須已經存在元素。
// 將vec中元素全部拷貝到target開始的位置中,注意拷貝的區間為vec.begin() ~ vec.end()的左閉右開的區間
copy(vec.begin(), vec.end(), target.begin());
// 拷貝區間也可以是由陣列位址構成的區間
copy(a, a+5, vec.begin() + 5);
末尾刪除元素:vec.pop_back()
對容器賦值:
在指定位置插入元素:
在指定位置刪除元素
與另乙個容器交換元素:vec.swap(vector& x)
清空容器元素:vec.clear()
可寫迭代器
唯讀迭代器(不能通過該指標來修改元素)
訪問第乙個元素:vec.front()
訪問最後乙個元素:vec.back()
返回乙個元素組成的陣列的指標:int* p = vec.data()
```
vector::iterator it;
for (it = vec.begin(); it != vec.end(); it++)
//或者
for (size_t i = 0; i < vec.size(); i++)
```
```
#include reverse(vec.begin(), vec.end());
```
文章最後,我個人認為標頭檔案```
#include sort(vec.begin(), vec.end()); //採用的是從小到大的排序
//如果想從大到小排序,可以採用上面反轉函式,也可以採用下面方法:
bool comp(const int& a, const int& b)
sort(vec.begin(), vec.end(), comp);
```
中的reverse()
函式寫得特別優雅,在此貼出原始碼
主要參考資料template void reverse (bidirectionaliterator first, bidirectionaliterator last)
}
c++ stl之vector用法總結
c++-api
C STL vector用法總結
向量 vector 是乙個封裝了動態大小陣列的順序容器 sequence container 跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是乙個能夠存放任意型別的動態陣列。順序序列 順序容器中的元素按照嚴格的線性順序排序。可以通過元素在序列中的位置訪問對應的元素。動態陣列 ...
C STL vector(向量)用法詳解
介紹 vector是表示可變大小陣列的序列容器。就像陣列一樣,vector也採用的連續儲存空間來儲存元素。也就是意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效。但是又不像陣列,它的大小是可以動態改變的,而且它的大小會被容器自動處理。本質講,vector使用動態分配陣列來儲存它的元素。...
C STL vector的insert用法整理
因為vector是可以和陣列一樣操作的,所以很多用法都幾乎用不到 比如insert用法,很少用到,但是還是要複習一下 vector int ve ve.insert ve.begin 1 表示在第乙個位置插入1 ve.insert ve.end 10 表示在末尾位置追加10最 的是vector還可以...