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;//二维
posted @ 2025-08-19 10:28  Granya  阅读(5)  评论(0)    收藏  举报