c++中向量vector的基本操作及用法
阿新 • • 發佈:2018-12-02
一、向量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[] // 返回容器中指定位置的一個引用。
總結以方便你我!
若有未講解清楚的或沒有講到的,歡迎評論留言!