學習C 向量 vector

2021-08-01 07:57:16 字數 3562 閱讀 8612

一、向量的介紹

向量 vector 是一種物件實體, 能夠容納許多其他型別相同的元素, 因此又被稱為容器。 與string相同, vector 同屬於stl(standard template library, 標準模板庫)中的一種自定義的資料型別, 可以廣義上認為是陣列的增強版。

在使用它時, 需要包含標頭檔案 vector,#include<vector>.

vector 容器與陣列相比其優點在於它能夠根據需要隨時自動調整自身的大小以便容下所要放入的元素。此外, vector 也提供了許多的方法來對自身進行操作。

二、向量的宣告及初始化

vector 型變數的宣告以及初始化的形式也有許多, 常用的有以下幾種形式:

vector

a ; //宣告乙個int型向量a

vector

a(10) ; //宣告乙個初始大小為10的向量

vector

a(10, 1) ;//宣告乙個初始大小為10且初始值都為1的向量

vector

b(a) ; //宣告並用向量a初始化向量b

vector

b(a.begin(), a.begin()+3) ; //將a向量中從第0個到第2個(共3個)作為向量b的初始值

除此之外, 還可以直接使用陣列來初始化向量:

int n =  ;

vector

a(n, n+5) ; //將陣列n的前5個元素作為向量a的初值

vector

a(&n[1], &n[4]) ; //將n[1] - n[4]範圍內的元素作為向量a的初值

三、元素的輸入及訪問

元素的輸入和訪問可以像操作普通的陣列那樣, 用cin《進行輸入,cout>>a[n]進行輸出。

#include

#include

using

namespace

std ;

int main()

`

在元素的輸出上, 還可以使用遍歷器(又稱迭代器)進行輸出控制。在 vector<int> b(a.begin(), a.begin()+3) ; 這種宣告形式中, (a.begin()、a.begin()+3) 表示向量起始元素位置到起始元素+3之間的元素位置。(a.begin(), a.end())則表示起始元素和最後乙個元素之外的元素位置。

向量元素的位置便成為遍歷器, 同時, 向量元素的位置也是一種資料型別, 在向量中遍歷器的型別為:vector<int>::iterator。 遍歷器不但表示元素位置, 還可以再容器中前後移動。

在上例中講元素全部輸出部分的**就可以改寫為:

//全部輸出

vector

::iterator t ;

for(t=a.begin(); t!=a.end(); t++)

cout

<<*t<<" " ;

*t 為指標的間接訪問形式, 意思是訪問t所指向的元素值。

四、向量的基本操作

1>. a.size()                 //獲取向量中的元素個數

2>. a.empty() //判斷向量是否為空

3>. a.clear() //清空向量中的元素

4>. 複製

a = b ; //將b向量複製到a向量中

5>. 比較

保持 ==、!=、>、>=、<、<= 的慣有含義 ;

如: a == b ; //a向量與b向量比較, 相等則返回1

6>. 插入 - insert

①、 a.insert(a.begin(), 1000); //將1000插入到向量a的起始位置前

②、 a.insert(a.begin(), 3, 1000) ; //將1000分別插入到向量元素位置的0-2處(共3個元素)

③、vector

a(5, 1) ;

vector

b(10) ;

b.insert(b.begin(), a.begin(), a.end()) ; //將a.begin(), a.end()之間的全部元素插入到b.begin()前

7>. 刪除 - erase

①、 b.erase(b.begin()) ; //將起始位置的元素刪除

②、 b.erase(b.begin(), b.begin()+3) ; //將(b.begin(), b.begin()+3)之間的元素刪除

8>. 交換 - swap

b.swap(a) ; //a向量與b向量進行交換

五、二維向量

與陣列相同, 向量也可以增加維數, 例如宣告乙個m*n大小的二維向量方式可以像如下形式:

vector

< vector

> b(10, vector

(5)); //建立乙個10*5的int型二維向量

在這裡, 實際上建立的是乙個向量中元素為向量的向量。同樣可以根據一維向量的相關特性對二維向量進行操作。

#include

#include

using

namespace

std ;

int main()

return

0;}

同樣, 按照這樣的思路我們還可以建立更多維的向量, 不過維數太多會讓向量變得難以靈活控制, 三維以上的向量還需酌情使用。

vector的元素不僅僅可以使int,double,string,還可以是結構體,但是要注意:結構體要定義為全域性的,否則會出錯。下面是一段簡短的程式**:

#include

#include

#include

#include

using

namespace

std;

typedef

struct rect

演算法

(1) 使用reverse將元素翻**需要標頭檔案#include<algorithm>

reverse(vec.begin(),vec.end());將元素翻轉(在vector中,如果乙個函式中需要兩個迭代器,一般後乙個都不包含.)

(2)使用sort排序:需要標頭檔案#include<algorithm>,

sort(vec.begin(),vec.end());(預設是按公升序排列,即從小到大).

可以通過重寫排序比較函式按照降序比較,如下:

定義排序比較函式:

bool comp(const

int &a,const

int &b)

呼叫時:sort(vec.begin(),vec.end(),comp),這樣就降序排序。

學習C 向量 vector

一 向量的介紹 向量vector是一種物件實體,能夠容納許多其他型別相同的元素,因此又被稱為容器。與string相同,vector 同屬於stl standard template library,標準模板庫 中的一種自定義的資料型別,可以廣義上認為是陣列的增強版。在使用它時,需要包含標頭檔案 ve...

學習C 向量 vector

一 向量的介紹 向量 vector 是一種物件實體,能夠容納許多其他型別相同的元素,因此又被稱為容器。與string相同,vector 同屬於stl standard template library,標準模板庫 中的一種自定義的資料型別,可以廣義上認為是陣列的增強版。在使用它時,需要包含標頭檔案 ...

C 學習之路(vector 向量)

是乙個封裝了動態大小陣列的順序容器,向量是乙個能夠存放任意型別的動態陣列。迭代器型別 vector iterator it1 it1能讀寫vector中的元素 string interator it2 it2能讀寫string中的元素 vector const iterator it3 只能讀 st...