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号