C 序列容器之 vector常見用法總結

2021-08-18 18:03:19 字數 3104 閱讀 8100

一、關於vector

本文預設讀者具有一定的c++基礎,故大致敘述,但保證**正確。

vector是乙個動態的序列容器,相當於乙個size可變的陣列。

相比於陣列,vector會消耗更多的記憶體以有效的動態增長。而相比於其他動態序列容器(deques, lists and forward_lists),vector能更快的索引元素(就像陣列一樣),而且能相對高效的在尾部插入和刪除元素。如果不是在尾部插入和刪除元素,效率就沒有這些容器高。

當需要使用vector的時候,需要包含標頭檔案:#include ,一般加上using namespace std;如果不加,則在呼叫時候必須用std::vector<...>這樣的形式,即在vector前加上std::,這表示運用的是std命名空間下的vector容器。

二、常見用法(以int型別為例)

1.宣告及初始化

1

2

3

4

5

6

7

8

9

10

vector<int> a;//宣告乙個int型向量a

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

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

vector<int> b(a);//宣告並用向量a初始化向量b

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

intn = ;

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

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

2.新增元素

1

2

3

4

5

6

7

vector<int> a;

a.push_back(1);//在尾部加入乙個資料

a.push_back(2);

a.pop_back();//刪除最後乙個資料

a.insert(a.begin(), 0);//在a.begin()之前加入0

a.erase(a.begin());//將a.begin()的元素刪除

a.erase(a.begin() + 1, a.end());//將第二個元素以後的元素均刪除

3.判斷vector是否為空

1

2

3

4

vector<int> a;

if(a.empty())

4.遍歷訪問vector

1

2

3

4

5

6

7

8

9

10

11

vector<int> a;

//像陣列一樣以下標訪問

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

//以迭代器訪問

vector<int>::iterator it;

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

5.排序必須包含algorithm標頭檔案

1

2

3

4

#include

vector<int> a;

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

6.以vector實現二維陣列

1

vector> a(10, vector<int>(5));//建立乙個10行5列的int型二維陣列 相當於a[10][5];

同理可以建立三維及以上陣列,這些多維陣列的操作同一維的vector類似。

C 序列式容器之vector

容器,顧名思義,是用來容放東西的場所。c 容器容放某種資料結構,以利於對資料的搜尋或排序或其他特殊目的。眾所周知,常用的資料結構不外乎 陣列array,鍊錶list,樹tree,棧stack,佇列queue,雜湊表hashtable,集合set 對映表map等等。容器便是容納這些資料結構的。這些資料...

STL序列式容器之vector

序列式容器 序列式容器 可序列集群,其中的元素都可序,但未必有序。vector概述 vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈話性,array 是靜態空間,一旦配置了就不能改變 要換個大 或小 一點的房子,可以,一切瑣細得由客戶端自己來 首先配置一塊新...

c 序列式容器(一) Vector

vector維護的是乙個連續的線性空間,有三個比較重要的指標,start指向目前使用空間的頭,finish指向目前使用空間的尾,end of storage指向目前可用空間的尾。增加新元素的時候,如果備用空間不夠,會將容量擴容到兩倍。會經歷 重新配置,元素移動,釋放原空間 等過程,因此,擴容的時候效...