STL--容器适配器(queue、priority_queue、stack)

适配器(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),布布扣,bubuko.com

时间: 2024-12-13 14:26:34

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

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

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是如何借助基础容器实现一种常用的数据结构stack (栈),本文介绍下另外一种STL内部定义的另外一种STL容器适配器queue(队列). 对于接触过数据结构的人来说,队列并不陌生,它是一种FIFO(first in first out)的数据结构.与栈相比,队列的不同之处在于:(1)队列是一种先进先出的数据结构,而栈则是一种后进先出的数据结构:(2)队列支持首尾两端的访问操作,而栈

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

目录 string stack queue list 点击上面的内容可以实现跳转哦 简介:本文记录了对string list queue stack四个容器的学习总结,包含有四种容器常用的函数介绍和一些使用过程中碰到的细节总结,在list容器中介绍了迭代器的使用. 头文件 想要用哪一种容器,就要加上对应的头文件 比如想要使用queue , 就要加上 #include<queue> 以此类推,想要使用STL库中的容器,只要加上它们的头文件就好. string 目录部分 1.string的定义及初

STL容器适配器 stack, queue

stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack的其他元素,换言之,stack不允许有遍历行为. 将元素推入stack的操作称为push, 将元素推出stack的操作称为pop. 为什么将stack称为适配器呢?我们先来看看适配器是怎么定义的.具有这种“修改某物接口,形成另一种风貌”之性质者,称为adapter(适配器).换言之,由于stack的

STL容器及适配器

STL容器   1.序列式容器 : vector,deque,list. 每个元素都有固定的位置(取决于插入的时机和位置,与元素值无关). vector 特点: 将一个元素置于一个动态数组中加以管理,可以随机存取元素.在数组尾部添加或删除元素非常快速,但是在中部或头部插入或删除元素比较耗时. deque "double-ended queue" 双端队列,可以随机存取.数组尾部或头部添加或删除元素非常快速,但在中部插入或删除元素比较费时.实际上,deque 是对vector 和list

C++ Primer 学习笔记_55_STL剖析(十):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例

七种基本容器:vector.deque.list.set.multiset.map.multimap 一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/deque/list对象创建了一个先进后出容器:queue是用deque或list对象创建了一个先进先出容器:priority_queue是用vector/deque创建了一个排序队列,内部用二叉堆实

STL之容器适配器priority_queue的实现框架

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 在前面的文章STL之heap相关操作算法中介绍了堆的相关操作算法,由于堆的注意主要作用是用于排序,我们也知道堆排序的时间复杂度为o(nlogn),是一种不稳定的排序算法,利用堆这一数据结构,我们可以很快第获取一个大数据中最大(或最小)的k个数.同时,上篇文章中,也提出了相关heap算法的一些问题. 问题1:在调用push_heap函数实现向堆中插入元素之前,我们必须要先将向底层容器的末端插入该元素,然后才能调用push_heap内部的向上调整来

STL标准库-容器适配器

摘要: 技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class的方法,非常好理解. 如果你想让一个calss拥有另一个class的功能,你都可以这样做:1.继承 2.包含 迭代器适配器 运用继承方式,实现适配功能,其实现与仿函数适配器相似. 容器适配器中主要运用的就是包含,即一个类含的一个成员变量是另一个类,本节简单介绍两个容器适配器 容器适配器 qu

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

摘要: 对 容器适配器 的疑问. 刚开始接触 容器适配器 时,总感觉怪怪的,认为多此一举,顺手搜了搜,原来我在这一点is not alone: STL容器适配器的用途 其中有个老兄说的好,这里 引用一下: 1 adapter原意是插座.适配器.接合器的意思.现在我需要一个栈结构,我们可以用deque来实现,只在一端进行元素插入和弹出,另一端不动.这说明deque可以用作一个栈结构,但它又不能直接地严格地满足你的要求,因为你不能防止别人在另一端乱动你的东西.你需要对它进行一些包装,作一些限制,使之

STL容器学习总结

本文主要讨论C++标准库中的顺序容器及相应的容器适配器,这些内容主要涉及顺序容器类型:vector.list.deque,顺序容器适配器类型:stack.queue.priority_queue. 标准库中的容器分为顺序容器和关联容器.顺序容器(sequential container)内的元素按其位置存储和访问,顾名思义,这些内部元素是顺序存放的:顺序容器内的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定.而关联容器的元素按键(key)排序. 容器类共享部分公共接口.标准库定义的三

C++STL容器和迭代器

1.简介 容器(container)用于存放数据的类模板.可变长数组.链表.平衡二叉树等数据结构在 STL 中都被实现为容器.程序员使用容器时,就是将容器类模板实例化为容器类,需要指明容器中存放的元素是什么类型的. 容器中可以存放基本类型的变量,也可以存放对象.对象或基本类型的变量被插入容器中时,实际插入的是对象或变量的一个复制品. 1.1 容器分类 容器分为2类:顺序容器和关联容器 顺序容器:可变长动态数组 vector.双端队列 deque.双向链表 list.之所以被称为顺序容器,是因为元