STL的应用
来源:互联网 发布:mac怎么输入法 编辑:程序博客网 时间:2024/06/08 00:08
栈和队列都没有迭代器
vector,map,set有迭代器(iterator)
1.set
set< int > q; //集合
q.insert(x); //将x推入集合,内部已自动排序且无重复项,无需sort与unique
q.begin(); //集合的首地址
q.end(); //集合的尾地址
q.size();//集合的大小
set ::iterator it;//迭代器,可以指向同类型的集合
it=q.lower_bound(k);//求大于等于k的第一个数的地址 加*为地址元素
it=q.upper_bound(k);//求大于k的第一个数的地址 加*为地址元素
q.count(15);//集合是否有15的元素(二分查找),有返回1,没有返回0
q.erase(15);//删除15(也可以写入地址)
q.clear(); //清空set
ps:
multiset q;
可以存入重复元素,用法相同
#include <cstdio>#include <cstring>#include <algorithm>#include <set>using namespace std;int main(){ set<int> q; q.insert(1); q.insert(2); q.insert(15); q.insert(7); q.insert(4); set<int>::iterator it; for(it=q.begin();it!=q.end();it++) printf("%d ",*it); //1 2 4 7 15 puts(""); int num=q.size(); printf("%d\n",num);//5 printf("%d %d\n",(int)q.count(15),(int)q.count(8));// 1 0 q.erase(15); printf("%d\n",(int)q.count(15)); //0 q.erase(q.begin());//q.begin()是首地址,其中的元素为1 printf("%d\n",(int)q.count(1));// 0}
2.multiset
与set用法大致相同
#include <cstdio>#include <algorithm>#include <iostream>#include <set>using namespace std;typedef long long ll;multiset<int> q;int main(){ q.insert(5);q.insert(5);q.insert(7); q.insert(6);q.insert(8);q.insert(4); q.insert(40);q.insert(1);q.insert(2); q.insert(2);q.insert(77);q.insert(17); multiset<int>::iterator it; for(it=q.begin();it!=q.end();it++) //1 2 2 4 5 5 6 7 8 17 40 77 printf("%d ",*it); puts(""); it=q.find(5); q.erase(it); //删除q中一个5(删除的是地址元素) for(it=q.begin();it!=q.end();it++) //1 2 2 4 5 6 7 8 17 40 77 printf("%d ",*it); puts(""); q.erase(2); //删除q中所有的2 for(it=q.begin();it!=q.end();it++) //1 4 5 6 7 8 17 40 77 printf("%d ",*it); puts(""); it=q.end();//删除最后一个元素 q.erase(--it); for(it=q.begin();it!=q.end();it++) //1 4 5 6 7 8 17 40 printf("%d ",*it); puts("");}
3.vector
q.push_back();//推入
q.size();//q的集合大小
q.begin();//第一个元素
q.end();// 最后一个元素的后一位
q.erase(unique(q.begin(),q.end()),q.end()); //截取重复的元素
sort(q.begin(),q.end())//对vector里的元素进行排序
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <vector>using namespace std;int main(){ vector<int> q; q.push_back(15); q.push_back(6); q.push_back(15); q.push_back(8); q.push_back(2); q.push_back(27); printf("%d\n",(int)q.size());//6 for(int i=0;i<q.size();i++) printf("%d ",q[i]); puts(""); //15 6 15 8 2 27 sort(q.begin(),q.end()); //2 6 8 15 15 27 for(int i=0;i<q.size();i++) printf("%d ",q[i]); puts(""); q.push_back(27); q.push_back(28); //2 6 8 15 15 27 27 28 for(int i=0;i<q.size();i++) printf("%d ",q[i]); puts(""); int pos=(int)(unique(q.begin(),q.end())-q.begin());//2 6 8 15 27 28 27 28 for(int i=0;i<q.size();i++) printf("%d ",q[i]); puts(""); for(int i=0;i<pos;i++) printf("%d ",q[i]); puts(""); //2 6 8 15 27 28}
4.priority_queue
优先队列 队列头是 q.top();
普通队列 队列头是 q.front();
按照权值大小自定义排列
#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <set>#include <cmath>#include <iostream>#define INF 0x3f3f3f3fusing namespace std;typedef long long ll;struct node{ int x,y; bool operator < (const node &a)const { if(x!=a.x) return x<a.x; return y>a.y; //除了优先队列是 先根据x从大到小,再根据y从小到大(与其他相反) //其余的都是根据x从小到大,再根据y从大到小 排序 }}tmp[10060];int main(){ tmp[0].x=1,tmp[0].y=4; tmp[1].x=3,tmp[1].y=2; tmp[2].x=2,tmp[2].y=3; sort(tmp,tmp+3); for(int i=0;i<3;i++) printf("%d ",tmp[i].x); puts(""); //1 2 3 priority_queue<node> q; q.push(tmp[0]),q.push(tmp[1]),q.push(tmp[2]); while(!q.empty()) { node cur=q.top(); q.pop(); printf("%d ",cur.x); } puts(""); //3 2 1 set<node> qq; qq.insert(tmp[0]),qq.insert(tmp[1]),qq.insert(tmp[2]); for(set<node>::iterator it=qq.begin();it!=qq.end();it++) { printf("%d ",it->x); } puts(""); //1 2 3}
5.queue
队列,先进先出的线形结构
常用函数:
queue q;
q.empty();//判断q是否为空,空返回1,非空返回0
q.pop();//弹出队列中的第一个元素,无返回值
q.push(x);//推入x元素
q.size();//q中的元素个数
q.front();//返回队列第一个元素
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;int main(){ queue<int> q; q.push(15); q.push(4); q.push(88); q.push(64); q.push(27); printf("%d \n",q.front());//15 q.pop(); printf("%d \n",q.front());//4 q.push(55);//4 88 64 27 55 while(!q.empty()) { q.pop(); } //empty }
6.map
string 为c++ 输出用cout ;
#include <cstdio>#include <cstring>#include <string>#include <algorith>#include <map>#include <iostream>#define INF 0x3f3f3f3fusing namespace std;#define 第一键值 string#define 第二键值 intint main(){ map<第一键值,第二键值> q;//一一对应的映射关系 q["sdf"]=5; q["???"]=5; q["fgh"]=7; q["djy"]=8; for(map<第一键值,第二键值>::iterator it=q.begin();it!=q.end();it++)//遍历map { cout<<it->first<<" "<<it->second<<endl; } // ??? 5 // djy 8 // fgh 7 // sdf 5 //按第一键值排序 q.count("++");//查找 “++” 有返回 1 没有返回 0 q.erase("fgh");//可以删除 “fgh” 元素}
7.stack
先进后出
q.empty(); //堆栈为空则返回true
q.pop(); //移除栈顶元素
q.push(); //在栈顶增加元素
q.size(); //返回栈中元素数目
q.top(); //返回栈顶元素
#include <cstdio>#include <cstring>#include <algorithm>#include <stack>using namespace std;int main(){ stack<int> q; q.push(15); q.push(4); q.push(88); q.push(64); q.push(27); printf("%d \n",q.top());//27 q.pop(); printf("%d \n",q.top());//64 q.push(55); while(!q.empty()) { printf("%d ",q.top());//55 64 88 4 15 q.pop(); } //empty}
8.string
string s;
cin>>s;
s.length()//返回s字符串的长度
sort(s.begin(),s.end())//对string类型进行排序
#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <iostream>//cin cout#define INF 0x3f3f3f3fusing namespace std;int main(){ string a="ab",b="abc"; a+=b; a+="aasdafadsfasdas"; a+="h"; cout<<a<<endl;//ababcaasdafadsfasdash cout<<a.find("aas")<<endl;//5 cout<<string::npos<<endl;//18446744073709551615 cout<<a.find(";;;")<<endl;//18446744073709551615 if(a.find(";;;;")==string::npos) { cout<<"no"<<endl; }}
- STL的简单应用
- STL 的应用
- ACM STL的应用
- STL string 的应用
- STL的应用
- STL的应用
- STL的应用
- 贴给你的STL 应用!
- STL中的stack的应用
- STL string 型的应用
- STL的几个算法应用
- hdu4585(STL的map应用)
- STL Set的综合应用
- stl之vector的应用
- STL :sscanf sprintf的应用
- STL应用
- STL应用
- stl应用
- 二维码 ThoughtWorks.QRCode 简单使用实例
- 如何关闭TortoiseSVN的TSVNCache.exe进程
- vs2010软件使用总结
- public、private、protected区别-访问权限
- 重温Java基础之Java程序流程控制(二)
- STL的应用
- 剑指Offer:二叉树的镜像
- php实现签到功能
- Linux 下 安装最新 Python2.X
- 该屎的Mysql乱码
- 新版Java为什么要修改substring的实现
- LocalBroadcast详解及源码分析
- 微信小程序版豆瓣同城
- tomcat 配置数据源