几种stl的应用
1.set(特点:插入后元素自动从小到大排序)
set< int > ::iterator it;//迭代器,可以指向同类型的集合
q.find(k);//其中一个元素k的地址
q.count(k);//k的个数
q.erase(k);//删除所有值为k的元素
q.erase(it);删除it指向的地址和元素
NOTE:删除后指针指向不变
#include<iostream>
#include<string.h>
#include<algorithm>
#include<string.h>
#include<set>
using namespace std;
int main()
{
multiset<int>q;
multiset<int>::iterator it;
//*****插入*****//
for(int i=1;i<16;i+=2)
q.insert(i);
q.insert(5),q.insert(11);
for(it=q.begin();it!=q.end();it++)
printf("%-3d",*it);printf("\n");
//set自动排序1 3 5 5 7 9 11 11 13 15
//*****查询相同元素个数*****//
printf("%d\n",(int)q.count(5));//查询5的个数:2
//*****删除一个·指定元素*****//
it=q.find(5);//q中的一个5的地址
q.erase(it);//删去了一个5
for(it=q.begin();it!=q.end();it++)
printf("%-3d",*it);printf("\n");
//1 3 5 7 9 11 11 13 15
//*****删除全部指定元素*****//
q.erase(11);//删除全部11
for(it=q.begin();it!=q.end();it++)
printf("%-3d",*it);printf("\n");
//1 3 5 7 9 13 15
//*****删除尾元素*****//
it=q.end();//q,end()不存在元素
q.erase(--it);//删去q.end()前面一个地址
for(it=q.begin();it!=q.end();it++)
printf("%-3d",*it);printf("\n");
//1 3 5 7 9 13
//*****查询大于等于所选元素的地址*****//
q.insert(9);//1 3 5 7 9 9 13
it=q.lower_bound(9);printf("%d\n",*it);//9
//求大于等于9的第一个数的地址
//*****查询大于所选元素的地址*****//
it=q.upper_bound(9);printf("%d\n", *it);//13
//求大于9的第一个数的地址
return 0;
}
2.vector
sort(q.begin(),q.end())//对vector里的元素进行排序
q.erase(unique(q.begin(),q.end()),q.end()); //截取重复的元素
q.insert(q.begin()+i,a);//在第i+1个元素前插入a
q.erase(q.begin()+i,q.begin()+j);//删除区间[i,j)内元素 (区间从0开始)
NOTE:删除后指针指向下一个元素
#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>v;
int main()
{
for(int i=1;i<16;i+=2)
v.push_back(i);
v.push_back(2),v.push_back(5);
//vector<int>::iterator it;
for(int i=0;i<v.size();i++)
printf("%-3d", v[i]);printf("\n");
//1 3 5 7 9 11 13 15 2 5
//****排序****//
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++)
printf("%-3d", v[i]);printf("\n");
//1 2 3 5 5 7 9 11 13 15
//****去重****//
v.erase(unique(v.begin(),v.end()),v.end());
for(int i=0;i<v.size();i++)
printf("%-3d", v[i]);printf("\n");
//1 2 3 5 7 9 11 13 15
//****中间插入****//
v.insert(v.begin()+1,3);//第1+1个位置插入元素3
for(int i=0;i<v.size();i++)
printf("%-3d", v[i]);printf("\n");
//1 3 2 3 5 7 9 11 13 15
//****删除区间元素****//
v.erase(v.begin()+0,v.begin()+3);//删除[0,3)区间的元素
for(int i=0;i<v.size();i++)
printf("%-3d", v[i]);printf("\n");
//3 5 7 9 11 13 15
return 0;
}
3.priority_queue(特点:入队后元素自动从大到小排序)
普通队列首元素q.front(),优先队列首元素q.top();
q.empty();//判断q是否为空,空返回1,非空返回0
q.pop();//弹出队列中的第一个元素,无返回值
q.push(x);//推入x元素
q.size();//q中的元素个数
q.top();//返回队列第一个元素
1)默认的优先队列(结构体,重载小于)
#include<iostream>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
struct node{
int x,y;
bool operator < (const node &a)const{
return x<a.x;//定义x小则代表该结构体小
}
}tt[111];
priority_queue<node>q;//定义为大的在队首
int main()
{
tt[1].x=3,tt[1].y=3; tt[2].x=2,tt[2].y=1;
tt[3].x=4,tt[3].y=4; tt[4].x=1,tt[4].y=2;
for(int i=1;i<=4;i++)
printf("%d ",tt[i].x),q.push(tt[i]);
printf("\n");//3 2 4 1
while(!q.empty()){//按队列元素的降序输出
node p=q.top();
q.pop();
printf("%-2d",p.x);
}//4 3 2 1
return 0;
}
2)less和greater优先队列
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
priority_queue<int,vector<int>,less<int> >l;//升序
priority_queue<int,vector<int>,greater<int> >g;//降序
int main()
{
for(int i=1;i<=5;i++)
l.push(i),g.push(i);
while(!l.empty()){
int p=l.top();
l.pop();
printf("%d ",p);
}printf("\n");//1 2 3 4 5
while(!g.empty()){
int p=g.top();
g.pop();
printf("%-2d",p);
}printf("\n");//5 4 3 2 1
return 0;
}
几种stl的应用的更多相关文章
- Codeforces Round #366 (Div. 2) C Thor(模拟+2种stl)
Thor 题意: 第一行n和q,n表示某手机有n个app,q表示下面有q个操作. 操作类型1:app x增加一条未读信息. 操作类型2:一次把app x的未读信息全部读完. 操作类型3:按照操作类型1 ...
- STL标准模板库介绍
1. STL介绍 标准模板库STL是当今每个从事C++编程的人需要掌握的技术,所有很有必要总结下 本文将介绍STL并探讨它的三个主要概念:容器.迭代器.算法. STL的最大特点就是: 数据结构和算法的 ...
- STL学习之路
本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单 ...
- STL —— STL六大组件
注:以下内容摘自 http://blog.csdn.net/byxdaz/article/details/4633826 STL六大组件 容器(Container) 算法(Algorithm) 迭代器 ...
- STL源码分析《4》----Traits技术
在 STL 源码中,到处可见 Traits 的身影,其实 Traits 不是一种语法,更确切地说是一种技术. STL库中,有一个函数叫做 advance, 用来将某个迭代器(具有指针行为的一种 cla ...
- STL学习小结
STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...
- 学习STL-介绍一下STL
从大学时就开始学习C++,到现在近5年的时间了却很少用到STL.现在想想真得是对不起这门语言,也对不起宝贵的五年光阴.我钟爱C++,所以一定要完全搞懂它,理解它.爱一个人的前提是要懂他(她),爱一门语 ...
- 两种QMultiMap的遍历方法(最好使用只读遍历器)
留个爪,备查 QMultiMap<QString, QString>& remote_map = my_obj->m_MapVersion; // ccc 这里体现了引用的好 ...
- ACM竞赛常用STL(一)
全排列函数next_permutation STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include <algorithm> using namespac ...
随机推荐
- nova 命令管理虚拟机
nova命令管理虚拟机: $ nova list #查看虚拟机$ nova stop [vm-name]或[vm-id] #关闭虚拟机$ nova start [vm-name]或[vm-id] #启 ...
- 2016521-Java-第八周学习总结
课本知识点 start() run()定义线程线程对象被调度之后所执行的操作 -sleep(int millsecond),必须在try-catch语句块中调用sleep方法 sAlive() 线程同 ...
- 老师博客copy
新闻 管理 Py西游攻关之基础数据类型 数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频 ...
- HDOJ 1754 I Hate It (线段树)
题目: Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要 ...
- MySQL 4.1-5.0-5.1-5.5-5.6各版本的主要区别
各版本的一些命令差异: show innodb status\G mysql-5.1 show engines innodb status\G mysql-5.5 关于grant授权 mysql ...
- 注解 java.lang.annotation.Inherited 介绍
在Spring Boot中大量使用了@Inherited注解.我们来了解一下这个注解的用法,注解的源码: package java.lang.annotation; /** * Indicates t ...
- WCF之endpoint的binding属性
最近在回顾之前做的wcf项目时,发现这个binding的属性有BasicHttpBinding,WSHttpBinding,webHttpBinding等几种方式.但是其中的区别当时未深入研究.现在网 ...
- 题解-POI2014 FAR-FarmCraft
Problem bzoj权限题,洛谷上可提交 洛谷上的奇葩翻译不要看,很多条件缺漏 题意简述:给定一棵树,每条边权为1,给定所有点点权,每条边仅能走两次,求以一定顺序遍历整棵树后,使所有点中的到达时间 ...
- Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD
题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整 ...
- event & signals & threads
The Event Systemhttp://doc.qt.io/qt-4.8/eventsandfilters.html Each thread can have its own event loo ...