当前位置:   article > 正文

C++ STL(蓝桥杯应急)_v.push_back(i);

v.push_back(i);

目录

vector

queue

priority_queue

stack

map

set

算法函数

全排列函数next_permutation() 

反转内容reverse(s,s+10) / reverse(s.begin(),s.end())

整数的绝对值 abs(n)

sort()


vector

  1. ///vector
  2. vector<int> v;
  3. vector<int> ::iterator i;
  4. for(int i=0;i<10;i++)
  5. v.push_back(i);
  6. for(i=v.begin();i!=v.end();i++)
  7. printf("%d ",*i);
  8. printf("\n");
  9. i=v.begin()+5;
  10. v.insert(i,12);
  11. v.erase(i,i+5);
  12. for(i=v.begin();i!=v.end();i++)
  13. printf("%d ",*i);

queue

  1. ///queue
  2. queue<int> q;
  3. for(int i=1;i<10;i++){
  4. q.push(i);
  5. }
  6. printf("%d\n",q.back());
  7. int a[10];
  8. for(int i=0;i<10;i++)
  9. a[i]=i;
  10. sort(a,a+10,cmp);
  11. printf("%d",a[9]);
  12. while(q.size()){
  13. printf("%d ",q.front());
  14. q.pop();
  15. }

priority_queue

  • 大顶堆:堆顶元素最大,less<int> priority_queue<int> q;默认大顶堆
  • 小顶堆:堆顶元素最小, greater<int>; priority_queue<int,vector<int>,greater<int> > q

应用

求已经加入队列的数的第k大的数是多少

可以用优先队列中的小顶堆来解决。在队列中只保存k个数,这k个数按大小顺序排列,最前面的是“最优”,即是这k个数中最小的(便是第k大)。对于新加入的数,只需要和priority_queue队列中的top比较,如果比top小,那这个数就无意义,不压入队列;如果比这个数大,之前的“最优解”已经不是第k大的数了,所以把它踢出,压入这个新元素,然后priority_queue就会自动再排列,top又变成“最优解”。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. ///priority_queue
  5. priority_queue<int,vector<int>,greater<int> > q;
  6. char s;
  7. int n,k,t;
  8. scanf("%d %d",&n,&k);
  9. getchar();
  10. while(n--){
  11. cin>>s;
  12. if(s=='I'){
  13. scanf("%d",&t);
  14. if(q.size()<k)
  15. q.push(t);
  16. else{
  17. if(t>q.top()){
  18. q.pop();
  19. q.push(t);
  20. }
  21. }
  22. }else{
  23. printf("%d\n",q.top());
  24. }
  25. }
  26. return 0;
  27. }

stack

练习题: 

“蓝桥杯”练习系统http://lx.lanqiao.cn/problem.page?gpid=T517

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. string s;
  4. int i,a,b,flag=1;
  5. int f(int x,int y){
  6. return a*x+b*y;
  7. }
  8. int cal(int i,int flag){
  9. int num=0;
  10. while(isdigit(s[i])){
  11. num=num*10+s[i]-'0';
  12. i++;
  13. }
  14. return num*flag;
  15. }
  16. int main(){
  17. stack<int> sk;
  18. cin>>a>>b;
  19. cin>>s;
  20. for(i=0;i<s.size();i++){
  21. flag=1;
  22. if(s[i]=='-'){
  23. i++;
  24. flag=-1;
  25. sk.push(cal(i,flag));
  26. }
  27. else if(isdigit(s[i]))
  28. sk.push(cal(i,flag));
  29. if(s[i]==')'){
  30. int y =sk.top(); sk.pop();
  31. int x = sk.top(); sk.pop();
  32. sk.push(f(x,y));
  33. }
  34. }
  35. printf("%d\n",sk.top());
  36. return 0;
  37. }

map

映射

map<int,int> mp;

mp.clear() 

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. map<char,int> m;
  5. m.clear();
  6. m['c']=12;
  7. m['a']=1;
  8. m['b']=32;
  9. m['e']=4;
  10. m['r']=98;
  11. map<char,int>::iterator i;
  12. for(i=m.begin();i!=m.end();i++){
  13. printf("%c %d",i->first,i->second);
  14. }
  15. return 0;
  16. }

 

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. map<int,int> mp;
  5. int n,a,maxx=0,minn=100000,x,y;
  6. cin>>n;
  7. while(scanf("%d",&a)!=EOF){
  8. mp[a]+=1;
  9. minn=min(a,minn);
  10. maxx=max(a,maxx);
  11. }
  12. for(int i=minn;i<=maxx;i++){
  13. if(mp[i]==0)x=i;
  14. else if(mp[i]==2) y=i;
  15. }
  16. cout<<x<<" "<<y<<endl;
  17. return 0;
  18. }

set

集合,自动去重,自动由小到大排序

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. set<int> s;
  5. for(int i=5;i<10;i++)
  6. s.insert(i);
  7. s.insert(2);
  8. s.insert(5);
  9. set<int>::iterator i;
  10. for(i=s.begin();i!=s.end();i++)
  11. cout<<*i<<" "<<endl;
  12. return 0;
  13. }

算法函数

全排列函数next_permutation() 

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int a[6]={1,2,3,4,5,6};
  5. do{
  6. for(int i=0;i<6;i++)
  7. cout<<a[i]<<" ";
  8. printf("\n");
  9. }
  10. while(next_permutation(a,a+6));
  11. return 0;
  12. }

 

反转内容reverse(s,s+10) / reverse(s.begin(),s.end())

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. vector<int> v;
  5. for(int i=0;i<10;i++){
  6. v.push_back(i);
  7. }
  8. reverse(v.begin(),v.end());
  9. for(int i=0;i<10;i++)
  10. cout<<v[i]<<endl;
  11. return 0;
  12. }

整数的绝对值 abs(n)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int a=-21;
  5. cout<<abs(a)<<endl;
  6. return 0;
  7. }

 

sort()

sort(a,a+10) //由小到大

sort(a,a+10,greater<int>()) //由大到小

结构体排序 

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef struct{
  4. int number;
  5. string name;
  6. }Student;
  7. bool cmp(Student x,Student y){
  8. return x.number<y.number;
  9. }
  10. int main(){
  11. Student s[2];
  12. s[0].name="sss";
  13. s[0].number=5;
  14. s[1].name="yyy";
  15. s[1].number=2;
  16. sort(s,s+2,cmp);
  17. printf("%d",s[0].number);
  18. return 0;
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/412001
推荐阅读
相关标签
  

闽ICP备14008679号