vector的簡單使用
PAT裡讓大家輸入N組資訊的時候基本上都會告訴你N的取值範圍,我們都習慣了建立一個最大範圍的數組,然後再用for循環來完成。可是有的時候題目沒有告訴你N的範圍,我們就不知道剛開始要建立多大的數組了,建立小了不夠,建立太大又可能超記憶體。是以我們希望能建立一個動态的數組,可以自動調整自己的大小。我們當然可以用底層的函數realloc自己寫一個出來,但是其實系統已經提供了一種現成的叫vector的模版
vector可以翻譯成矢量,他支援很多實用的算法比如排序
使用vector前要#include“vector”
vector要怎麼用呢?舉個栗子
我們如果想建立一個int型的vector,然後把幾個數字加進去,然後輸出vector裡的數字。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
int a = 1, b = 2, c = 3;
v.push_back(a);//此時vector的大小為1
v.push_back(b);//此時vector的大小為2
v.push_back(c);//此時vector的大小為3
cout << v[0] <<" "<< v[1]<<" " << v[2];
}
可以看到vector的使用方法和數組是一樣的,v[0]就代表v矢量的第0個元素。
我們還可以在初始化的時候一次加入多個元素
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int a[5] = { 1,2,3,4,5 };
vector<int> v(a,a+5);//或者vector<int> v(&a[0],&a[4]+1);
int i;
cout << v[4];
}
注意啦!如果要想把a[0]到a[4]都加入到vector裡,那麼初始化的時候就要寫成v(&a[0],&a[4]+1)而不是v(&a[0],&a[4]),沒錯結尾就是要多加1。
還可以用pop_back函數删除vector最後一個元素
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int a[5] = { 1,2,3,4,5 };
vector<int> v(a,a+5);
int i;
for (i = 0; i < v.size();i++)
cout << v[i]<<" ";
cout << endl;
v.pop_back();//把最後面的5删掉
for (i = 0; i < v.size(); i++)
cout << v[i] << " ";
}
vector不僅可以是int ,char這種基本類型,還可以是自定義的結構體;
比如vector<mystruct> v;
不過要注意,結構體不能直接用sort排序,你要在sort函數裡第3個參數加上一個自己定義的比較函數。
vector還支援用sort函數排序哦,非常實用,以後不用自己手寫冒泡快速之類的排序了。
int a[5]={1,2,3,4,5}
vector<int> v(a,a+5);
sort(v,v+5)//或者參數用疊代器,sort(v.begin(),v.end())
sort和我之前講過的一樣,第二個參數要多加1。
最後列出vector類其他的一些函數操作
c.clear() 移除容器中所有資料。
c.empty() 判斷容器是否為空。
c.erase(pos) 删除pos位置的資料
c.erase(beg,end) 删除[beg,end)區間的資料
c.front() 傳回第一個資料。
c.insert(pos,elem) 在pos位置插入一個elem拷貝
c.pop_back() 删除最後一個資料。
c.push_back(elem) 在尾部加入一個資料。
c.resize(num) 重新設定該容器的大小
c.size() 回容器中實際資料的個數。
c.begin() 傳回指向容器第一個元素的疊代器
c.end() 傳回指向容器最後一個元素的後一個的疊代器