适配器(Adaptor)是提供接口映射的模板类。适配器基于其他类来实现新的功能,成员函数可以被添加、隐藏,也可合并以得到新的功能。
STL提供了三个容器适配器:queue、priority_queue、stack。
这些适配器都是包装了vector、list、deque中某个顺序容器的包装器。注意:适配器没有提供迭代器,也不能同时插入或删除多个元素。
 本文地址:http://www.cnblogs.com/archimedes/p/cpp-adapter.html,转载请注明源地址。

队列(queue)

先进先出(FIFO)的数据结构
可供选择的容器只有deque和list。对大多数用途使用默认的deque。
1、要用到头文件#include<queue>
2、常用函数
  • queue<int> Q 声明一个int的空队列Q;
  • push() 将一个新元素接到队列的末端;
  • pop() 弹出队列中的第一个元素,返回的是一个void;
  • front() \ back() 存取队列中的第一个元素和最后一个元素,返回的是一个引用;
  • empty() 测试队列是否为空;
  • size() 获得队列中元素的个数;

堆栈(stack)

先进后出(FILO)的数据结构
可以使用三个标准顺序容器vector、deque、list中的任何一个作为stack的底层模型。
1、要用到头文件#include<stack>
2、常用函数
  • stack<int> Q 声明一个int的空栈Q;
  • push() 将一个新元素接到栈的末端;
  • pop() 弹出栈中的末端元素,返回的是一个void;
  • top() 存取栈中的最后一个元素,返回的是一个引用;
  • empty() 测试栈是否为空;
  • size() 获得栈中元素的个数;
<priority_queue> 内部实现: 堆
priority_queue<T, Sequence, Compare>
支持操作:
push() O(logn)
pop() O(logn)
top() O(1)存取队列中的第一个元素,与queue不同
See also: push_heap(), pop_heap() … in <algorithm>

priority_queue用法举例

#include <queue>
#include <vector>
using namespace std;
priority_queue <int> maxheap; //int最大堆
struct cmp{
bool operator()(int a,int b)
{return a > b;}
};
priority_queue <int,vector<int>,cmp> minheap; //int最小堆

priority_queue的比较函数

优先级的比较函数,可以使用缺省默认,也可以重载自己编写的比较函数。
1) 假设优先队列中的元素为结构体,要对其中某个变量排序。此时可以在结构体中重载操作符:
priority_queue<int, vector<int>, cmp> Q;
struct cmp{
int seq; //重载运算符号
bool operator < (const Test &a) const {
return seq < a.seq; // seq大的优先级高
}
};

2)如果是根据与优先队列中某个元素相关的变量排序,且此变量不在结构体中,则可参考greater<int>() 的方式去重载(),具体做法如下:

priority_queue<int, vector<int>, cmp> Q;
struct cmp {
bool operator()(int a, int b) { // d[a]小的优先级高
return d[a] > d[b];
}
};

STL--容器适配器(queue、priority_queue、stack)的更多相关文章

  1. STL总结之queue, priority_queue, stack

    之所以把这三个容器放在一起,是因为他们都是容器适配器.   STL中queue就是我们常用的FIFO队列,实现是一个容器适配器,这种数据结构在网络中经常使用.   queue的模板声明: templa ...

  2. STL之容器适配器queue的实现框架

    说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是怎样借助基础容器实现一种经常使用的数据结构stack (栈),本文介绍下第二种STL ...

  3. c++ STL容器适配器

    一.标准库顺序容器适配器的种类     标准库提供了三种顺序容器适配器:queue(FIFO队列).priority_queue(优先级队列).stack(栈)   二.什么是容器适配器     &q ...

  4. 容器适配器————queue

    只能访问 queue<T> 容器适配器的第一个和最后一个元素.只能在容器的末尾添加新元素,只能从头部移除元素. 操作 queue<int> q;//创建一个int型的空队列q ...

  5. STL容器适配器 stack, queue

    stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...

  6. stl容器学习——queue,stack,list与string

    目录 头文件 string 目录部分 1.string的定义及初始化 ① 用一个字符串给另一个字符串赋值 ②用字符串常量对字符串进行赋值 ③ 用n个相同的字符对字符串赋值 2.string的运算符及比 ...

  7. STL容器分析--queue

    queue,顾名思义,是指队列.满足先进先出的原则.

  8. 容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例

    一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/d ...

  9. STL标准库-容器适配器

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class ...

  10. c++ 顺序容器学习 - 容器适配器

    摘要: 对 容器适配器 的疑问. 刚开始接触 容器适配器 时,总感觉怪怪的,认为多此一举,顺手搜了搜,原来我在这一点is not alone: STL容器适配器的用途 其中有个老兄说的好,这里 引用一 ...

随机推荐

  1. Using HiveServer2 - Authentication

    To configure Hive for use with HiveServer2, include the following configuration properties in the .. ...

  2. MFC设置静态文本框,编辑框等控件背景和字体颜色

    在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:afx_msg HBRUSH OnC ...

  3. MyBatis知多少(3)

    解决存储过程固有限制的方法之一就是将SQL嵌入到更加通用的语言中去.与存储过程将业务逻辑移入数据库相反,内联SQL将SQL从数据库移入了应用程序代码.这就使得SQL语句可以直接与语言进行交互.从某种意 ...

  4. spark 编译

    http://blog.csdn.net/zyj8170/article/details/44678405

  5. CentOS6部署VNC服务端

    VNC (Virtual Network Computer)是虚拟网络计算机的缩写.VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Wi ...

  6. java正则表达式小练习(IP地址检测、排序,叠词的处理,邮件地址的获取)

    import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; import java.util.reg ...

  7. 分享一套精美的现代 UI PSD 工具包【免费下载】

    艾库特·耶尔马兹,是土耳其伊斯坦布尔的一位高级艺术总监,他向大家分享了一套美丽的现代 UI 工具包,你可以免费下载.所以,你可以使用这个优秀的素材设计视觉互动和有吸引力的用户界面. 此 UI 套件提供 ...

  8. gopush-cluster 架构

    前言 gopush-cluster是一套golang开发的实时消息推送集群,主要分享一下开发这套系统的想法和思路. 架构 主要分为三个模块来开发,comet/web/message. comet 主要 ...

  9. 关于SQL SERVER高并发解决方案

    现在大家都比较关心的问题就是在多用户高并发的情况下,如何开发系统,这对我们程序员来说,确实是值得研究,最近找工作面试时也经常被问到,其实我早有去关心和了解这类问题,但一直没有总结一下,导致面试时无法很 ...

  10. 专题——web.xml 中 url-pattern

    一.映射什么? 一个请求发送到 servlet 容器,servlet 容器会将当前请求的 url 路径减去 协议.端口号.contextPath,剩下 servletPath 就是用来做 url-pa ...