1. 程式人生 > >c++中向量vector的基本操作及用法

c++中向量vector的基本操作及用法

一、向量vector介紹
vector屬於STL(Standard Template Library, 標準模板庫)中的一種自定義的資料型別。可以看成是一個可以裝載各種資料型別的動態陣列(可以看成加強版陣列)。動態陣列就是動態分配記憶體的陣列,不想普通的陣列宣告時就向系統申請固定的空間。
二、vector的宣告及初始化
c++中必須要包含#include <vector>

#include <vector>
vector <T> vec;//T為各種資料型別,可以是基本型別,也可以是自己定義的資料型別
vector <T> vec[20];//定義了一個二維陣列,vec[i]就是一個vector<T>動態陣列

不難看出看出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的初值

三、vector 輸入輸出及訪問
直接用cin>>a[i】或者cout<<a[i]輸入輸出即可
四、vector的遍歷
第一種方式(類似於陣列遍歷):

vector<int> a;
for(int i=0;i<a.size();i++)
{
  cin>>a[i];
  cout<<a[i];
}

第二種方式(vector迭代器遍歷):

vector <int> a;
vector <int> :: iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
	cin>>*iter;
	cout<<*iter;
}

第三種方式(利用反向迭代器遍歷)

vector <int> a;
vector<int>::reverse_iterator iter;
for(iter=a.rbegin();iter=a.rend();iter++)
{
	cin>>*iter;
	cout<<*iter;
}

五、向量vector的基本函式

vector <int> a;
vector <int> b;
1. a.size() :返回向量a中元素的個數
2. a.empty() :判斷向量a是否為空,空返回true
3. a.clear() :清空向量a的所有元素
4.a.insert():向向量a中插入
a.insert(pos,1000) :將1000插入到向量a的pos位置上。例:a.insert(a.begin(),1000) ;
a.insert(pos, n, 1000) :將1000分別插入到向量a的pos後n個位置上(包含pos)例:a.insert(a.begin(), 3, 1000) ; 
b.insert(b.begin(), a.begin(), a.end()) : 將a.begin(), a.end()之間的全部元素插入到b.begin()前
5.a.erase:刪除向量a的元素
a.erase(pos): 刪除向量a中pos位置的元素
a.erase(st,ed): 刪除向量中從st到ed之間的元素
6.b.swap(a): 交換a、b向量
7.比較以及複製
比較:保持 ==、!=、>、>=、<、<= 的慣有含義 ;
複製:b=a 將a複製一份賦給b

六、更多函式

c.assign(beg,end)c.assign(n,elem)//將[beg; end)區間中的資料賦值給c。將n個elem的拷貝賦值給c。
c.at(idex)//傳回索引idx所指的資料,如果idx越界,丟擲out_of_range。
c.back()      // 傳回最後一個數據,不檢查這個資料是否存在。
c.begin()     // 傳回迭代器中的第一個資料地址。
c.capacity()  // 返回容器中資料個數。
c.clear()     // 移除容器中所有資料。
c.empty()     // 判斷容器是否為空。
c.end()       // 指向迭代器中末端元素的下一個,指向一個不存在元素。
c.erase(pos)  // 刪除pos位置的資料,傳回下一個資料的位置。
c.erase(beg,end)  //刪除[beg,end)區間的資料,傳回下一個資料的位置。
c.front()     // 傳回第一個資料。
get_allocator // 使用建構函式返回一個拷貝。
c.insert(pos,elem)    // 在pos位置插入一個elem拷貝,傳回新資料位置。
c.insert(pos,n,elem)  // 在pos位置插入n個elem資料。無返回值。
c.insert(pos,beg,end) // 在pos位置插入在[beg,end)區間的資料。無返回值。
c.max_size()       // 返回容器中最大資料的數量。
c.pop_back()       // 刪除最後一個數據。
c.push_back(elem)  // 在尾部加入一個數據。
c.rbegin()         // 傳回一個逆向佇列的第一個資料。
c.rend()           // 傳回一個逆向佇列的最後一個數據的下一個位置。
c.resize(num)      // 重新指定佇列的長度。
c.reserve()        // 保留適當的容量。
c.size()           // 返回容器中實際資料的個數。
c1.swap(c2)
swap(c1,c2)        // 將c1和c2元素互換。同上操作。
operator[]         // 返回容器中指定位置的一個引用。

總結以方便你我!
若有未講解清楚的或沒有講到的,歡迎評論留言!