写在前面
“模板库”这一系列文章用来复习
O
I
OI
OI模板
由于时间原因,作者无法一一亲自调试其中的程序,也因如此,有一部分程序来自于互联网,如果您觉得这侵犯了您的合法权益,请联系
(
Q
Q
2068926345
)
(QQ2068926345)
(QQ2068926345)删除。
对于给您造成的不便和困扰,我表示深深的歉意。
本系列文章仅用于学习,禁止任何人或组织用于商业用途。
本系列文章中,标记*的为选学算法,在
N
O
I
P
NOIP
NOIP中较少涉及。
STL
Queue
【代码实现】
//problemID:http://codevs.cn/problem/3187/
#include<cstdio>
#include<queue>
using namespace std;
queue<int> q;
int n,opt,k;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&opt);
if(opt==1) scanf("%d",&k),q.push(k);
else if(opt==2) q.pop();
else printf("%d\n",q.front());
}
return 0;
}
Stack
【代码实现】
//problemID:http://codevs.cn/problem/3139/
#include<cstdio>
#include<stack>
using namespace std;
int n,opt,k;
stack<int> s;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&opt);
if(opt==1) scanf("%d",&k),s.push(k);
else if(opt==2) s.pop();
else printf("%d\n",s.top());
}
return 0;
}
Priority_queue
【代码示例】
//problemID:https://www.luogu.org/problemnew/show/P3378#sub
#include<iostream>
#include<cstdio>
#include<ctype.h>
#include<queue>
using namespace std;
inline int read(){
int x=0,f=0;char ch=getchar();
while(!isdigit(ch))f|=ch=='-',ch=getchar();
while(isdigit(ch))x=x*10+(ch^48),ch=getchar();
return f?-x:x;
}
priority_queue<int,vector<int>,greater<int> > q;
int a,b;
void write(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
}
int main(){
int m=read();
for(int i=1;i<=m;i++){
int a=readin();
if(a==1)q.push(read());
else if(a==2)write(q.top()),putchar('\n');
else q.pop();
}
return 0;
}
Deque
【代码示例】
#include<iostream>
#include<deque>
using namespace std;
int main(){
deque<int> deq(7,6);//初始化deque为7个int,每个int值为6
deq.push_front(2);//插入头
deq.push_back(3);//插入尾
cout<<"mydeque size: "<<deq.size()<<endl;
cout<<"mydeque contains:";
for(int i=0; i<mydeque.size();i++)cout<<" "<<mydeque[i];
cout<<endl;
return 0;
}
Map
【代码示例】
//problemID:https://www.luogu.org/problemnew/show/P3370
#include<iostream>
#include<string>
#include<map>
using namespace std;
map<string,int>p;
int n,cnt;
string s;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
p[s]++;
}
cout<<p.size()<<"\n";
/*
map<string,int>::iterator it;//定义一个迭代器遍历
for(it=p.begin();it!=p.end();it++){
cout<<it->first<<" "<<it->second<<" "<<++cnt<<"\n";
}
*/
return 0;
}
Strstr
【代码示例】
#include<cstring>
#include<iostream>
using namespace std;
char s1[100],s2[100],s3[100];
int main(){
s1[0]=s2[0]=s3[0]='\0';
strcpy(s1,"Golden Global View");
strcpy(s2,"bal");
strcpy(s3,"Hell");
char *p=strstr(s1,s2);
char *p2=strstr(s1,s3);
cout<<(p==NULL?"NULL":p)<<endl;
cout<<(p2==NULL?"NULL":p2)<<endl;
return 0;
}
Find
【代码示例】
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int a[]={10,20,30,40};
int main () {
int *p;
p=find(a,a+4,30);
if(p!=a+4) std::cout<<"Element found in a: "<<*p<<'\n';
else cout<<"Element not found in a\n";
vector<int>ve(a,a+4);
vector<int>::iterator it;
it=find(ve.begin(),ve.end(),30);
if(it!=ve.end())cout<<"Element found in ve: "<<*it<<'\n';
else cout<<"Element not found in ve\n";
return 0;
}
Set
【代码示例】
#include<iostream>
#include<set>
#include<iterator>
using namespace std;
typedef set<int,greater<int> >se;
int main(){
se c1;
c1.insert(4);
c1.insert(3);
c1.insert(5);
c1.insert(1);
c1.insert(6);
c1.insert(2);
c1.insert(5);
se::iterator p;
for(p=c1.begin();p!=c1.end();p++)cout<<*p<<' ';
puts("");
pair<se::iterator,bool> status=c1.insert(4);
if(status.second){
cout<<"4 inserted as element "<<distance(c1.begin(),status.first)+1<<"\n";
}
else cout<<"4 already exists"<<endl;
set<int> c2(c1.begin(),c1.end());
copy(c2.begin(),c2.end(),ostream_iterator<int>(cout," "));
puts("");
c2.erase(c2.begin(),c2.find(3));
int num=c2.erase(5);
cout<<num<<" element(s) removed\n";
copy(c2.begin(),c2.end(),ostream_iterator<int>(cout," "));
puts("");
}
*Multiset
【代码示例】
#include<iostream>
#include<set>
#include<iterator>
using namespace std;
typedef multiset<int,greater<int> > se;
int main(){
se c1;
c1.insert(4);
c1.insert(3);
c1.insert(5);
c1.insert(1);
c1.insert(6);
c1.insert(2);
c1.insert(5);
se::iterator p;
for(p=c1.begin();p!=c1.end();p++)cout<<*p<<' ';
puts("");
se::iterator ipos=c1.insert(4);
cout<<"4 inserted as element "<<distance(c1.begin(),ipos)+1<<"\n";
multiset<int> c2(c1.begin(),c1.end());
copy(c2.begin(),c2.end(),ostream_iterator<int>(cout," "));
puts("");
c2.erase(c2.begin(),c2.find(3));
int num=c2.erase(5);
cout<<num<<" element(s) removed\n";
copy(c2.begin(),c2.end(),ostream_iterator<int>(cout," "));
puts("");
}