c 標準模板庫 vector的常見用法

2021-10-08 08:14:53 字數 3359 閱讀 8095

1.可以用下標索引來訪問

2.是乙個動態陣列,可以存放基本資料型別、結構、類等

3.是一種資料結構(順序儲存的線性表),元素呈線性順序連續排列,是一種可以自動增加長度的陣列。

4.vector分配記憶體空間時,會比實際所需的多分配一些,使以後插入方便。

5.使用前新增標頭檔案#include

1.vector的初始化

(1)宣告乙個size為0的vec向量

vectorvec;

(2)宣告size不為0的vec向量

vectorvec1(5); //vec1是定義了的具有5個元素的向量,初值不確定

vectorvec2(5,1); //vec2的內容為1,1,1,1,1

vectorvec3; //vec3的內容為1,2,3,4,5

(3)用已知向量a給vec向量賦初值

vectorvec(a);//用向量a給vec賦值,vec的值和a的值完全相等

vectorvec(a.begin(),a.begin+3);//將向量a中從0-2(3個)的元素賦值給vec

(4)通過陣列賦初值

int arr[5] = ;

vectorvec(arr, arr + 5); //將arr陣列的0-4的元素賦值給ec向量(和vec.end()指標統一)。

vectorvec(&arr[0], &arr[4]);

(5)錯誤的賦值

vectorvec;

for(int i=0;i<10;++i)//下標只能用來獲取已經存在的元素

2.向vector陣列內插入元素。

注:(1)向末尾插入時,可以直接插入,如果預留的空間不夠,才會重新分配記憶體(2)向中間某個位置插入時,由於vector的底層實現還是陣列,插入點以後的所有節點都需要重新分配記憶體。

(1)push_back(同型別)在vector末尾插入新元素

vectorvec1;

vec1.push_back(1);

int a[6]=;

vectorb;

vectorc(a,a+5);

for(vector::iterator it=c.begin();it(2)insert()第乙個引數為迭代器,作用為在迭代器前面插入新元素

vector::iterator it;

it=vec2.begain();

vec2.insert(it,5); //在第乙個元素前插入5

vec.insert(vec.begin(),6);//在第乙個元素前插入6

vec2.insert(v.begin()+2,1);//在迭代器中第二個元素前插入新元素

vec2.insert(vec.begin(),2,6);//在第乙個元素前插入2兩個6

vec.insert(vec.begin()+1,a+2,a+6);//在vec第乙個元素前插入a的第三個元素到第五個元素(不包括a+6)

(3)assign()

vec3.assign(2,5); //清除以前的所有元素,加入兩個5

vec3.assign(a.begin(),a.begin()+3);//將a的0-2個元素賦值(加入)向量vec3

3.刪除元素:

(1)pop_back()刪除最後乙個元素。

(2)erase()刪除指定位置元素。(其中的引數要是指標變數如begain(),end(),及迭代器的值)

vec.erase(vec.begin()+2);//刪除第三個元素

vec.erase(a.begin()+1,a.begin()+3);//刪除第乙個到第二個元素

(3)clear()清除所有元素。

(4)empty()判斷該陣列是否為空

4.訪問與遍歷

(1) 以下標訪問

vectora;

for(int i = 0; i < a.size(); i++)

(2)以迭代器訪問

vector::iterator it;

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

cout<5.其他

front()訪問第乙個元素的值

begin()訪問第乙個元素的位址

back()訪問最後乙個元素的值

end()訪問最後乙個元素的位址

size()陣列的元素個數

resize(10)陣列的元素個數調整至10個,多刪少補,值隨機

a.swap(b)a中的元素和b中的元素整體交換

6.常用演算法

(1)逆序排列

#include

reverse(vec.begin(), vec.end());

(2)排序

//從小到大排序

#include

sort(vec.begin(), vec.end());

//從大到小排序

//(1)法一: reverse函式

//(2)法二:

bool cmp(const int& a, const int& b)

sort(vec.begin(), vec.end(), cmp);

(3)複製

#include

copy(a.begin(),a.end(),b.begin()+1);

(4)查詢,若存在返回其在向量中的位置

#include

find(a.begin(),a.end(),10);

題目舉例:ccf 202006-2 稀疏向量

#include

#include

using namespace std;

int main()

); //注意這種新增格式

}for(int j=0;j>index>>value;

v.push_back();

}long long sum=0;//求內積相乘可能超過int範圍

int i=0,j=0;

while(ielse if(u[i].firsti++;

else

j++;

}cout

}

C 標準模板庫 vector

include vectorarryname vector int myarray vector myarray2 node 是結構體 vector double myarray3 vectorint array 兩維均可變長的變長二維陣列 之間一定要有空格 否則c11之前認為是向右可能報錯 vec...

標準庫vector模板

vector是同一種型別的物件的集合,每個物件都有乙個對應的整數索引值。vector成為容器,因為它能包含其他物件,所有物件必須是同一種型別。include using std vector 注意 vector是一種類模板,不是一種資料型別,它可以來定義任意多種資料型別。如vector和vector...

C 標準模板庫 向量(vector)

1 可將向量 vector 想象成為乙個在程式執行時能改變長度的陣列。因為在c c 中定義了乙個陣列之後,這個陣列是固定長度的,不能隨意改變大小,向量和陣列用處相同,不同之處在於能自由改變大小。2 宣告變數v是基型別為int的向量 vectorv 3 vector代表乙個模板類,可以將t換成任意資料...