STL
简单的数据结构
https://ac.nowcoder.com/acm/problem/14661
双端队列和vector
可以用双端队列写和vector写。
一些关于双端队列的操作:
dequed; //创建一个双端队列
d.front() //取队首元素
d.back() //取队尾元素
push_back() //在队尾插入元素
push_front() //在队首插入元素
insert(d.begin()+1,9); //第一个元素之后插入9
size() //双端队列的大小
empty() //判断是否为空
begin() //队首的指针,指向队首元素
end() //队尾元素的下一位作为指针
rbegin() //以最后一个元素作为开始
rend() //以第一个元素的上一位作为指针
erase() //删除某一个元素
clear() //删除所有元素
pop_front() //删除队首元素
pop_back() //删除队尾元素
deque::iterator it; //迭代器
deque::reverse_iterator rit; //反向迭代器
原文链接:https://blog.csdn.net/weixin_44915226/java/article/details/105224513
双端队列代码:
#include <bits/stdc++.h>
#include <algorithm>
#define mod 1000000007
#define LL long long
using namespace std;
int main()
{
deque<int>b;
int n,m,s,i,a;
cin >> n >> m;
while(m--){
cin >> s;
if(s == 1){
cin >> a;
b.push_front(a);
}
if(s == 2){
b.pop_front();
}
if(s == 3){
cin >> a;
b.push_back(a);
}
if(s == 4){
b.pop_back();
}
if(s == 5){
reverse(b.begin(),b.end());
}
if(s == 6){
cout << b.size() << endl;
for(int i = 0; i < b.size(); i++){
cout << b[i] << " ";
}
cout << endl;
}
if(s == 7){
sort(b.begin(),b.end());
}
}
return 0;
} vector代码:
#include <bits/stdc++.h>
#include <algorithm>
#define mod 1000000007
#define LL long long
using namespace std;
int main()
{
vector<int>b;
int n,m,a,i,s;
cin >> n >> m;
while(m--){
cin >> s;
if(s == 1){
cin >> a;
b.insert(b.begin() + 0,a);
}
if(s == 2){
b.erase(b.begin());
}
if(s == 3){
cin >> a;
b.push_back(a);
}
if(s == 4){
b.pop_back();
}
if(s == 5){
reverse(b.begin(),b.end());
}
if(s == 6){
cout << b.size() << endl;
for(int i = 0; i < b.size(); i++){
cout << b[i] << " ";
}
cout << endl;
}
if(s == 7){
sort(b.begin(),b.end());
}
}
return 0;
} pair的用法
pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。
访问:用first访问成员一,second访问成员二
pair创建:
1:
pair<int,int>p p.first = 1;
2:
pair<int,int>p(3,4); cout << p.first << " " << p.second;3:加入vector (插入时要make_pair())
int main()
{
vector<pair<int,int> > s;
s.push_back(make_pair(2,3));
vector<pair<int,int> > ::iterator it;//迭代器
it = s.begin();
cout << (*it).first << " " << (*it).second;
return 0;
} 4:加入队列
int main()
{
queue<pair<int,int> > q;
q.push(make_pair(1,1));
q.push(make_pair(1,2));
q.pop();
cout << q.front().second;
return 0;
} 5:加入优先队列