c++之容器适配器

概述:

  适配器是标准库中通用的概念,包括容器适配器、函数适配器和迭代器适配器。本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。标准库提供了三种顺序容器适配器:queue、priority_queue和stack。


容器适配器类型


关联的容器类型


stack


vector、list、deque


queue(push_front运算)


list、deque


priority_queue(随机访问)


vector、deque

注:默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现。

栈适配器提供的所有操作:

s.empty()                  如果栈为空,则返回true,否则返回false

s.size()                        返回栈中元素的个数

s.pop()                        删除栈顶元素,但不返回其值

s.top()                         返回栈顶元素的值,但不删除该元素

s.push(item)              在栈顶压入新元素

队列和优先级队列提供的所有操作:

q.empty()                            如果队列为空,则返回true,否则返回false

q.size()                        返回队列中元素的个数

q.pop()                        删除队首元素,但不返回其值

q.front()                      返回队首元素的值,但不删除该元素(只适用于队列)

q.back()                      返回队尾元素的值,但不删除该元素(只适用于队列)

q.top()                         返回具有最高优先级的元素值,但不删除该元素(只适用于优先级队列)

q.push(item)             对于queue,在队尾插入一个新元素

对于priority_queue,在基于优先级的适当位置插入新元素

时间: 2024-10-22 15:11:04

c++之容器适配器的相关文章

5.0 容器适配器

STL中容器适配器有stack  queue  priority_queue共三种.他们都是在顺序容器的基础上实现的,屏蔽了顺序容器的一部分功能,突出或增加了另一些功能.容器适配器都有三个成员函数:push ,pop,top. 1)push:添加一个元素 2)top:返回顶部(对stack)或队头(对queue,priority_queue)的元素的引用. 3)pop:删除一个元素. 容器适配器上是没有迭代器的,所以在STL中的各种排序,查找,变序算法都不适用于容器适配器.

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

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

容器适配器

除了顺序容器外,标准库还定义了三个顺序容器适配器:stack.queue和priority_queue.适配器是标准库中的一个通用概念.容器.迭代器和函数都有适配器.本质上,一个适配器是一种机制.能使某种事物的行为看起来像另外一种事物一样.一个容器适配器接受一种已有的容器类型,使其行为看起来像一种不同的类型.例如,stack适配器接受一个顺序容器(除array或forward_list外),并使其操作起来像一个stack一样.下表列出了所有适配器都支持的操作和类型: 所以容器适配器都支持的操作和

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

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 一提到适配器(adapter).我们就想到了早期用电话线上网所用的调制解调器,俗称"猫"."猫"的作用是实现数模转化和模数转化,在client,它能够将电话的模拟信息转化为我们计算机能够接收的数字信息,所以猫相当于一个转换器.再举个更加好理解的样例来说明"适配器"的含义.相信在我们每一个人的家里都有插排,如果就这么一种情况.如今我们家里的墙壁上仅仅有一个三角的插口,而我们的电视却是两个口,怎么办

C++ 模板 之 类型萃取 与 容器适配器

类型萃取 在模板这里主要就是对于模板的不同类型的实例化 有不同的方案 这样可以提高效率等 比如 下面的 顺序表 在扩容时的拷贝 对于没有含有指向空间的指针的类 如int 自动使用memcpy() 对于含有指向空间的指针的类 如string 就自动一个一个的赋值 防止浅拷贝导致两个指针指向同一空间 析构两次时出错 类型萃取实现 主要用到了 模板  模板特化 内嵌型别  也可用函数重载 详见Copy() //(1)-------类型萃取 实现顺序表 //----------------------C

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创建了一个排序队列,内部用二叉堆实

C++ 容器:顺序性容器、关联式容器和容器适配器

什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种"对象"还包含了一系列处理"其它对象"的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是"容器类是一种对特定代码重用问题的良好的解决方案". 容器还有另一个特点是容器可以自行扩展.在解决问题时

容器适配器、STL算法简介

可以用某种顺序容器来实现 (让已有的顺序容器以栈/队列的方式工作) 1) stack: 头文件 <stack> 栈 -- 后进先出 2) queue: 头文件 <queue> 队列 -- 先进先出 3) priority_queue: 头文件 <queue> 优先级队列 -- 最高优先级元素总是第一个出列 都有3个成员函数: push: 添加一个元素; top: 返回栈顶部或队头元素的引用 pop: 删除一个元素 容器适配器上没有迭代器 STL中各种排序, 查找, 变序

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

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

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

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