向量 vector 是一種對象實體, 能夠容納許多其他類型相同的元素, 因此又被稱爲容器。 與string相同, vector 同屬於STL(Standard Template Library, 標準模板庫)中的一種自定義的數據類型, 可以廣義上認爲是數組的增強版。
在使用它時, 需要包含頭文件 vector, #include<vector>
vector 容器與數組相比其優點在於它能夠根據需要隨時自動調整自身的大小以便容下所要放入的元素。此外, vector 也提供了許多的方法來對自身進行操作。
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[] = {1, 2, 3, 4, 5} ;
vector<int> a(n, n+5) ; //將數組n的前5個元素作爲向量a的初始值 vector<int> a(&n[1], &n[4]) ; //將n[1] - n[4]範圍內的元素作爲向量a的初值
三、元素的輸入及訪問元素的輸入和訪問可以像操作普通的數組那樣, 用cin>>進行輸入, cout<<a[n]這樣進行輸出:
示例:
#include<iostream>
#include<vector>
using namespace std ;
int main()
{
vector<int> a(10, 0) ; //大小爲10初值爲0的向量a
//對其中部分元素進行輸入
cin >>a[2] ;
cin >>a[5] ;
cin >>a[6] ;
//全部輸出
int i ;
for(i=0; i<a.size(); i++)
cout<<a[i]<<" " ;
return 0 ;
}
在元素的輸出上,
還可以使用遍歷器(又稱迭代器)進行輸出控制。在 vector<int> b(a.begin(), a.begin()+3) ; 這種聲明形式中, (a.begin()、a.begin()+3) 表示向量起始元素位置到起始元素+3之間的元素位置。(a.begin(),
a.end())則表示起始元素和最後一個元素之外的元素位置。
向量元素的位置便成爲遍歷器, 同時, 向量元素的位置也是一種數據類型, 在向量中遍歷器的類型爲:vector<int>::iterator。 遍歷器不但表示元素位置, 還可以再容器中前後移動。
//全部輸出
vector<int>::iterator t ;
for(t=a.begin(); t!=a.end(); t++)
cout<<*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<int> a(5, 1) ;
vector<int> 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向量進行交換
五、二維向量
vector< vector<int> > b(10, vector<int>(5)); //創建一個10*5的int型二維向量
#include<iostream>
#include<vector>
using namespace std ;
int main()
{
vector< vector<int> > b(10, vector<int>(5, 0)) ;
//對部分數據進行輸入
cin>>b[1][1] ;
cin>>b[2][2] ;
cin>>b[3][3];
//全部輸出
int m, n ;
for(m=0; m<b.size(); m++) //b.size()獲取行向量的大小
{
for(n=0; n<b[m].size(); n++) //獲取向量中具體每個向量的大小
cout<<b[m][n]<<" " ;
cout<<"\n" ;
}
return 0;
}