天天看點

PAT小技巧之vector的簡單使用

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()             傳回指向容器最後一個元素的後一個的疊代器