简单STL笔记
想了好久,还是把自己了解的先整理一下吧,毕竟老是忘,这里主要简单介绍三种容器 set,queue,vector,以及栈 stack,队列queue 的简单用法。
一、set
在set中,效率比vector queue list高(注意,STL耗时)
set<int>s; 常用操作有:----------------set会自动从小到大排序,并且自动去除重复元
1.元素插入 s.insert();
2.顺序遍历(必须借助迭代器) set<int>::iterator it;
3.反序遍历 set<int>::reverse_iterator rit;
4.查找函数 s.find() 注意可以输出 cout<<*s.find()<<endl;而不能 cout<<s.find()<<endl;被查找数存在返回存在的位置,若不存在,则超出末端迭代器;
s.count()若存在返回1,不存在返回0,ps:1、0可以输出(详情见代码)。
5.元素删除 s.erase()(ps:删除后,会自动调整);
6.容器清空 s.clear();
7.集合大小 s.size();
8.multiset<unsigned int>s//多重集合,允许值重复
9.count(s.begin(),s.end(),value)统计value出现的次数
algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。
编写程序读取一系列int型数据,并将它们存储到vector对象中,然后统计某个指定的值出现了多少次。
#include<iostream> #include<set> using namespace std; int main() { set<int>s; set<int>::iterator it; set<int>::reverse_iterator next; for(int i=1;i<=10;i++) { s.insert(i);//元素插入 } cout<<"顺序遍历:"; for(it=s.begin();it!=s.end();it++)//顺序遍历 { cout<<*it<<' '; } cout<<endl; cout<<"集合大小:"; cout<<s.size()<<endl; cout<<"反向遍历:"; for(next=s.rbegin();next!=s.rend();next++)//反序遍历 { cout<<*next<<' '; } cout<<endl; cout<<"查找7的结果:"<<endl; cout<<*s.find(7)<<endl;//查找函数 cout<<s.count(7)<<endl; cout<<"查找11的结果:"<<endl; cout<<*s.find(11)<<endl; cout<<s.count(11)<<endl; s.erase(2);//元素删除 cout<<"删除元素2之后的顺序遍历:"; for(it=s.begin();it!=s.end();it++) { cout<<*it<<' '; } cout<<endl; cout<<"删除元素2之后的集合大小:"; cout<<s.size()<<endl;//集合大小 s.clear();//容器清空 cout<<"清空集合之后的集合大小:"; cout<<s.size()<<endl;//集合大小 return 0; }
二、vector
反转函数reverse
#include <iostream> using namespace std; typedef long long ll; int main() { string s,t; cin>>s; t=s; reverse(t.begin(),t.end()); puts(t==s?"Yes":"No"); return 0; }
二、prioroty_queue
优先队列的简单排序
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <vector> #include <queue> #include <cstdlib> #include <iomanip> #include <cmath> #include <ctime> #include <map> #include <set> using namespace std; #define lowbit(x) (x&(-x)) #define max(x,y) (x>y?x:y) #define min(x,y) (x<y?x:y) #define MAX 100000000000000000 #define MOD 1000000007 #define pi acos(-1.0) #define ei exp(1) #define PI 3.141592653589793238462 #define INF 0x3f3f3f3f3f #define mem(a) (memset(a,0,sizeof(a))) typedef long long ll; struct Node { int val; friend bool operator<(const Node &a,const Node &b) { return a.val>b.val;//大于小于号的方向与大小相反 } }node[100]; int main() { priority_queue<int>v; priority_queue<int,vector<int>,greater<int> >q; priority_queue<Node>p; int n,x; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&x); node[i].val=x; v.push(x); q.push(x); p.push(node[i]); } while(!v.empty()) { printf("%d ",v.top()); v.pop(); } printf("\n"); while(!q.empty()) { printf("%d ",q.top()); q.pop(); } printf("\n"); while(!p.empty()) { printf("%d ",p.top().val); p.pop(); } return 0; }