适配器(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. 【翻译】VSM 和触发器

    原文:The VisualStateManager and Triggers Author:Carole Snyder Silverlight 推出了可视化状态管理器( Visual State Ma ...

  2. 《编写高质量代码:改善C#程序的157个建议》源码下载

    ==== 目录 前 言第一部分 语言篇第1章 基本语言要素 / 2建议1:正确操作字符串 / 2建议2:使用默认转型方法 / 6建议3:区别对待强制转型与as和is / 9建议4:TryParse比P ...

  3. [转载]SharePoint 2013搜索爬外网配置

    本文介绍SharePoint 2013 设置外网(Internet)爬网源: 下面是步聚: 1. 新建外部爬网源 a. 打开 “SharePoint 2013 Central Administrati ...

  4. 2、Oracle Logminer性能测试

    Oracle Logminer性能测试 1 测试介绍 1.1 测试目的 通过模拟不同环境下LogMiner解析联机/归档日志文件运行情况,通过测试所获取的数据分析,通过对以下两点的验证来确定通过Log ...

  5. iOS-定时器

    一.定时器的作用 在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 二.定时器的种类 大概有三种方法:NSTimer.CA ...

  6. sql server 随机读取数据

    --sql server 随机读取数据 * FROM [tablename] ORDER BY NEWID() pk from [tablename] ORDER BY NEWID()) --这两个方 ...

  7. IOS中图片加载的一些注意点

    图片的加载: [UIImage imageNamed:@"home"] //加载 png图片 在ios中获取一张图片只需要写图片名即可 不需要写后缀 默认都是加载.png的图片 但 ...

  8. Unity3D入门基本概念整理

    1. (1)在场景中添加资源 只需单击工程视图 (Project View) 中的网格(Mesh)并拖动至层级视图 (Hierarchy) 或场景视图 (Scene View),便可将其添加至场景 ( ...

  9. 安卓使ScrollView滚动到底部代码

    在开发中,我们经常需要更新列表,并将列表拉倒最底部,比如发表微博,聊天界面等等, 这里有两种办法,第一种,使用scrollTo(): public static void scrollToBottom ...

  10. 查询分页的几种Sql写法

    查询分页的几种Sql写法 摘自:http://www.cnblogs.com/zcttxs/archive/2012/04/01/2429151.html 1.创建测试环境,(插入100万条数据大概耗 ...