一、關於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的初始值
int
n = ;
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
(
int
i = 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指向目前可用空間的尾。增加新元素的時候,如果備用空間不夠,會將容量擴容到兩倍。會經歷 重新配置,元素移動,釋放原空間 等過程,因此,擴容的時候效...