STL
STL
(一)隊列(queue、deque)
//普通隊列
//就是排隊,隊尾插入,隊頭刪除
queue<int>q;
q.push(x)
q.front()
q.pop()
q.size()
q.empty()
//雙端隊列(dequeue)
//隊頭隊尾都能進和出
deque<int>q;
front//q.front();q.front_push(x);q.front_pop();
back//q.back();q.back_push(x);q.back_pop();
push
pop
(二)棧
//先進后出
模擬:
int st[N],top=0;
偽代碼:
add(入棧){
top++;st[top]=x;
}
del(出棧){
top--;
}
修改函數里面的值的時候對應外面的值也會改變
(三)結構體(sru)
struct student {
string name;
int age;
int number;
};
student students[100],teacher;//可定義數組
int main(){
//兩種賦值方式
teacher.name="老師";
teacher.age=30;
teacher.number=1;
students[0]={"學生",15,2};
return 0;
}
(四)結構體中的sort排序和結構體之間的加減乘除定義
struct student {
string name;
int age;
int number;
friend bool operator < (student a,student b){
return a.age<b.age;
}
friend student operator + (student a,student b){
return {a.id+b.id,a.age+b.age,a.number+b.number};
}
//+ - * / & | 等等運算符都可以
};
sort(students,students+2);
students[3]=students[0]+students[1];
(五)優先隊列(堆)O(logN)
//優先隊列在STL中默認的是大根堆,最頂上的(top)就是當前最大的元素。top操作取一次為O(1)
//如果想要最頂上取最小的元素,則只需要每次存儲的時候加一個符號就行 不要忘記輸出也要加負號
//多了個q.top(),注意它和q.front()的區別
priority_queue<int>q;//如何定義:priority_queue<int>q
int main(){
q.push(3);
q.push(8);
q.push(1);
cout<<q.top()<<' '<<q.size()<<endl;
q.pop();
cout<<q.top()<<' '<<q.size()<<endl;
//q.empty() 判斷是否為空
}
//結構體與優先隊列結合
struct node {
int id,age;
friend bool operator <(node a,node b){//幫助優先隊列進行排序
return a.id<b.id;
}
};
priority_queue<node>q;
int main(){
q.push({3,21});
q.push({8,18});
q.push({1,20});
cout<<q.top().id<<endl;//注意形式
q.pop();//每次優先隊列的排序時間復雜度都是O(logN)
cout<<q.top().id<<endl;
}
(六)動態數組vector
vector<int>v;//一維的動態數組
vector<int>double_v[1000006];//二維的動態數組
int n,m,x;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>x;
double_v[i].push_back(x);//二維數組如何存儲的對應位置
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<double_v[i][j]<<' ';
}
cout<<endl;
}
return 0;
}
(七)map
//pair的用法,它可以存儲兩個東西9
pair<int,int> T=make_pair(1,2);
cout<<T.first<<' '<<T.second<<endl;
<map>//頭文件
//定義
map<int,int>q;//一維
map<string,int>
map<int,int>q[1000];//二維
map<pair<int,int>,int>q;//二維

浙公網安備 33010602011771號