1.queue
先进先出,First In First Out
queue<int> q; //定义
push(); //添加元素
pop(); //从对头移除元素
back(); //获取最后一个元素
front(); //获取第一个元素
empty(); //判断队列是否为空
size(); //获取队列的大小
2.stack
先进后出,First In Last Out
stack<int> stk; //定义
push(); //从栈顶添加元素
pop(); //从栈顶移除元素
top(); //获取栈顶元素
empty(); //判断栈是否为空
size(); //获取栈的大小
3.map,multimap
map是标准的关联式容器,map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。map底层的具体实现是采用红黑树变体的平衡二叉树的数据结构。在插入操作、删除和检索操作上比vector快很多。map可以直接存取key所对应的value,支持[]操作符,如map[key]=value。 map支持唯一键值,每个键只能出现一次;而multimap中相同键可以出现多次。multimap不支持[]操作符。
map<string,int> mp; //定义
begin() //返回指向头部的迭代器
clear() //删除所有元素
count() //获取指定元素出现的次数
empty() //判断map是否为空
end() //返回指向末尾的迭代器
erase() //删除一个元素
find() //查找一个元素
insert() //插入元素
size() //返回map中元素的个数
4.set,multiset
set:不允许键值重复
multiset:允许键值重复
set<int> st; //定义
count() //获取指定元素出现的次数
erase() //删除一个元素
find() //查找一个元素
clear() //删除所有元素
empty() //判断是否为空
insert() //插入元素
size() //返回元素的个数
5.vector
vector<int> v; //定义
size(); //返回元素的个数
empty(); //判断是否为空
front(); //返回第一个数据元素
back(); //返回最后一个数据元素
push_back(); //尾部插入元素
pop_back(); //删除最后一个元素
clear(); //删除容器中所有元素
题目
1.括号匹配(stack)
题目描述
假设表达式中允许包含圆括号和方括号两种括号,其嵌套的顺序随意,如([]())或[([][])]等为正确的匹配,[(])或([]()或(()))均为错误的匹配
本题的任务是检验一个给定的表达式中的括号是否匹配正确
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出“OK”,不匹配就输出“Wrong”
输入描述
一行字符,只含有圆括号和方括号,个数小于255
输出描述
匹配就输出一行文本“OK“,不匹配就输出一行文本”Wrong”
样例
输入
[(])
输出
Wrong
string s;
stack<int> q;
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='('){
q.push(1);
}
else if(s[i]==')'){
if(q.empty()){
cout<<"Wrong";
return 0;
)
if(q.top()==1){
q.pop();
}
else{
q.push(2);
}
}
//中括号同理
else if(s[i]=='['){
q.push(3);
}
else if(s[i]==']'){
if(q.empty()){
cout<<"Wrong";
return 0;
)
if(q.top()==3){
q.pop();
}
else{
q.push(4);
}
}
}
if(!(q.empty())){
cout<<"Wrong";
return 0;
}
cout<<"OK";
return 0;
2.周末舞会(queue)
题目描述
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。(0<m,n,k<1000)
输入描述
第一行男士人数m和女士人数n;
第二行舞曲的数目k。
输出描述
共k行,每行两个数,表示配对舞伴的序号,男士在前,女士在后。
样例
输入
2 4 6
输出
1 1 2 2 1 3 2 4 1 1 2 2
queue<int>q1;
queue<int>q2;
int m,n,k,cnt1,cnt2;
cin>>m>>n>>k;
for(int i=1;i<=m;i++){
q1.push(i);
}
q2同上操作
for(int i=1;i<=k;i++){
int x=q1.front();
int y=q2.front();
cout<<x<<' '<<y<<endl;
q1.pop();
q2.pop();
q1.push(x);
q2.push(y);
//每一次输出队头上的,然后把它扔队尾去
}
return 0;
3.查字典(map)
题目描述
顾名思义,查字典
输入描述
第一行一个整数N,表示字典中一共有多少单词(N<=10000)。
接下来每两行表示一个单词,其中: 第一行是一个长度<=100的字符串,表示这个单词,全部小写字母,单词不会重复。
第二行是一个整数,表示这个单词在字典中的页码。
接下来一行是一个整数M,表示要查的单词数(M<=10000)。
接下来M行,每行一个字符串,表示要查的单词,保证在字典中存在。
输出描述
M行,每行一个整数,表示第i个单词在字典中的页数。
样例
输入
2 scan 10 word 15 2 scan word
输出
10 15
int n,m;
string s;
int x;
map<string,int>mp;
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
cin>>x;
mp[s]=x;
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>s;
cout<<mp[s]<<endl;
}
return 0;
4.集合的并
顾名思义
输入集合{a},{b}输出合并后的
set<int>a;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
a.insert(x);
)
for(int i=1;i<=m;i++){
cin>>x;
a.insert(x);
}
set<int>::iterator it;
for(it=a.begin();it!=a.end();it++){
cout<<*it<<' '<<endl;
}
return 0;