C STL vector用法總結

2022-09-08 13:18:09 字數 3354 閱讀 8511

vector,是同一型別的物件的集合,這一集合可看作可變大小的陣列,是容器的一種。

對於容器來說,其重要特性之一便是於可以在執行時高效地新增元素

類似於陣列,vector採用連續記憶體位址來儲存元素,因此vector屬於順序容器。也就意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效;同時它比陣列更加靈活,它的大小(size)是可以動態改變的,且它的大小會被容器自動處理。

在這裡應理解好sizecapacity之間的關係,這將有助於理解vec.resize()vec.reserve()的區別:

與其它動態序列容器相比(deques, lists and forward_lists), vector在訪問元素的時候更加高效,在末尾新增和刪除元素相對高效。對於其它不在末尾的刪除和插入操作,效率更低。比起lists和forward_lists統一的迭代器和引用更好。

#include
(1)不帶引數的建構函式初始化

// 初始化乙個size為0的vector

vectorvec;

(2)帶引數的建構函式初始化

僅指定vector大小,此時每個元素值為預設值0

vectorvec(10); //初始化了10個預設值為0的元素,呼叫預設建構函式來初始化向量中元素
指定vector大小和元素初始值 

vectorvec(10, 1); //初始化了10個值為1的元素

// 或是

vectorvec = ; //初始化了1,2,3這3個元素

(3)通過同型別的vector初始化

vectortemp(5,1);

// 通過temp容器初始化乙個元素相同的vec向量

vectorvec(temp);

通常來說,前三種便足夠我們平時使用了。

(4)通過陣列位址初始化

int a[5] = ;

// 以陣列a的元素初始化vector,注意位址是從0到5(左閉右開區間)

vectorvec(a, a+5);

vectortemp =;

vectorvec(temp.begin(),temp.begin+3); //定義了vec值為temp中第0個到第2個(共3個)元素

(5)通過insert函式初始化

使用同型別的vector以及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函式初始化

int a[6] = ;

vectorvec;

// 將a的所有元素插入到vec中

vec.insert(vec.begin(), a, a+7);

通過insert函式新增m個值為n的元素

// 在vec開始位置處插入6個1

vec.insert(vec.begin(), 6, 1);

(6)通過copy函式賦值

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還可以...