論各容器(基礎操作)

論各容器(基礎操作)

①結構體
應用:
1.當一組數據有多個值,數據類型(“子串變換”)的時候(需要排序)
2.一個變量引申(聯繫)出多個數據(to,from)
3.廣度搜索
3.範圍:任何(一般在動規中不使用–太浪費)

優點:
1.定義結構體變量(數組)可以方便存儲
2.當面臨要給一組數據排序時(序號–防止亂序–雙參數“精明的管家”,價值,容量,距離)定義結構體數組寫一個排序規則就可以直接使用sort =>更快的取到你需要的值
(排序方便!!!)

struct node{
int p;
int num;
}k[100]; //定義結構體數組
bool r(node a,node b){ //這裏要用bool因爲並不是要返回一個特定的值,而是一種判斷的依據
return a.p>b.p; //判斷的依據
}
sort(k+1,k+n,r) //排序

②二維數組
應用:
1.存儲圖(橫縱座標)
2.存儲多種數據
int a[n+1][3];
for(int i=1;i<=n;i++)
{
cin>>a[i][0]>>a[i][1]>>a[i][2];
}
3.範圍:常應用於動態規劃,圖論

缺點:
1.無法使用排序
2.賦初始值就用兩層循環(當然也可以定義全局解決)

③一維數組
應用:
1.任何賦值行爲
2.特殊範圍:數組充當隊列,數組充當棧
數組充當隊列:

int head=0,tail=1;
int q[n+1];
bool exit[n+1]; //因題而異
while(head<tail){
	head++;
	if(滿足條件){
	     tail++;
	     q[head]=x;  //入隊
	     exit[x]=1;
	}
}

使用:
1.刪除操作:後面的數頂掉要刪除位的數
2.插入操作:插入位置後的所有數向後挪一位,最後空出的位置賦值
3.排序操作:sort 冒泡……

④隊列(一般用數組充當):
應用:
1.廣搜
2.先進先出每次只用一個值
queue <數據類型> q;
⑤棧
應用:
1.初始只需出一個數
2.常用於存個括號,存個符號…(匹配完醫囑出棧)
3.常定義多個
棧:----------------------------------------------- 隊列:
定義: stack <數據類型> s(棧名)----- --------queue
入棧:s.push();--------------------------------- push
出棧:s.pop();----------------------------------- pop
獲取棧頂:s.top();------------------------------ front
判斷是否爲空:s.empty()--------------------- empty
獲取長度:s.size()------------------------------size

⑥堆(優先級隊列)
應用:
需要將一列無序的數字快速調整至有序
一般都是要隨着輸入或在運算中不斷調整輸出
“中位數”

⑦vector
優點:可以調用專屬的容器,存儲不收限制(二維數組只能二維,vector不會)

引用:#include

輸入:G.push_back();
查看大小:G.size();

定義1:vector <數據類型> G[100000](名字);
調用1:G[0][1]
注意1:如果vector的G後面有長度,相當於定義了一個一維的vector,所以可以用G[0][1]。

定義2:vector g;
調用2:g[0]
注意2:如果vector的g後面沒有長度,只能用1維。

這裏舉個栗子 例子
在這裏插入圖片描述
⑧set
作用:去重
set中不允許有重複的數
定義
set s;
輸入
s.insert(x);
(x爲一個具體的數)
s.size()
這樣就可以知道有多少個重複的數了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章