参考:http://www.weixueyuan.net/view/6405.html

总结:  

  容器适配器是用基本容器实现的一些新容器,这些容器可以用于描述更高级的数据结构。

  容器适配器有三种:stack、queue和priority_queue。  

  stack可以与数据结构中的栈对应,它具有先进后出的特性,

  而queue则可以理解为队列,它具有先进先出的特性,

  priority_queue则是带优先级的队列,其元素可以按照某种优先级顺序进行删除。

  对于stack,push为入栈操作即向栈中添加元素,pop为出栈操作即删除栈顶元素,top函数则为返回栈顶元素但是并不删除它,empty函数则用于判断栈是否为空,若为空则返回true,否则返回false。

  默认情况下stack容器衍生自deque,如果我们想从vector衍生出stack容器则需要按照如下方式进行定义:stack < int, vector < int > > s;

  对于queue容器而言,它同样默认是衍生自deque容器的。

  priority_queue容器提供了top函数用于访问下一个元素,访问但不删除。对于整型的优先队列而言,默认是按照数据从大到小的顺序删除元素的。

---------------------------------

容器适配器是用基本容器实现的一些新容器,这些容器可以用于描述更高级的数据结构。容器适配器有三种:stack、queue和priority_queue。stack可以与数据结构中的栈对应,它具有先进后出的特性,而queue则可以理解为队列,它具有先进先出的特性,priority_queue则是带优先级的队列,其元素可以按照某种优先级顺序进行删除。

例1:

#include <iostream>
#include <stack>
using namespace std; int main()
{
stack< int > s;
int a;
while(cin >> a)
{
s.push(a);
}
while( !s.empty() )
{
a = s.top();
s.pop();
cout<< a <<endl;
}
return ;
}

本例是一个stack的示例程序,我们在主函数中定义了一个stack容器实体s,之后我们定义了一个变量a,我们用一个while循环向容器s中添加数据。之后再利用一个while循环将元素都出栈并打印显示。对于stack,push为入栈操作即向栈中添加元素,pop为出栈操作即删除栈顶元素,top函数则为返回栈顶元素但是并不删除它,empty函数则用于判断栈是否为空,若为空则返回true,否则返回false。

默认情况下stack容器衍生自deque,当我们定义一个stack容器实例时:

stack < int > s;

它其实等价于:

stack < int, deque < int > > s;

如果我们想从vector衍生出stack容器则需要按照如下方式进行定义:

stack < int, vector < int > > s;

例2:

#include <iostream>
#include <queue>
using namespace std; int main()
{
queue < int > q;
int a;
while(cin >> a)
{
q.push(a);
}
while( !q.empty() )
{
a = q.front();
q.pop();
cout<< a <<endl;
}
return ;
}

本例是queue容器的一个示例程序,对于queue容器而言,它同样默认是衍生自deque容器的。与stack容器相同,queue同样有push、pop函数用于插入和删除元素,只不过不同的是stack只能操作栈顶,而queue是在队列尾部插入元素,在队列头部删除元素。stack容器用top函数访问栈顶元素,而queue没有栈顶这么一说,因而也就没有top函数了,我们想访问队列头的元素可以使用front函数,该函数只是访问并不删除元素。empty函数同样可以用于判断队列queue是否为空。

例3:

#include <iostream>
#include <queue>
using namespace std; int main()
{
priority_queue < int > p; int a;
while(cin >> a)
{
p.push(a);
}
while( !p.empty() )
{
a = p.top();
p.pop();
cout << a <<" ";
}
cout << endl;
return ;
}

本例是priority_queue容器的示例程序,使用priority_queue容器我们只需要包含头文件queue就可以了。同样priority_queue容器可以用push和pop函数来插入和删除元素,priority_queue容器提供了top函数用于访问下一个元素,访问但不删除。对于整型的优先队列而言,默认是按照数据从大到小的顺序删除元素的。程序运行情况如下:

1 89 23 43 54 32 65 0 8 18 67 +↙
89 67 65 54 43 32 23 18 8 1 0

7.8 C++容器适配器的更多相关文章

  1. C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器

    vector变长机制.string的其他构造方法,添加.替换和搜索操作,string比较和数值转换,最后是容器适配器. vector对象是如何增长的 vector和string类型提供了一些成员函数, ...

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

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

  3. C++顺序性容器、关联性容器与容器适配器

    什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...

  4. C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器

    STL实践与分析 --容器适配器 引: 除了顺序容器.标准库还提供了三种顺序容器适配器:queue,priority_queue和stack.适配器是标准库中的概念.包含容器适配器,迭代器适配器和函数 ...

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

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

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

    说明:本文仅供学习交流,转载请标明出处,欢迎转载! 一提到适配器(adapter).我们就想到了早期用电话线上网所用的调制解调器,俗称"猫"."猫"的作用是实现 ...

  7. c++ STL容器适配器

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

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

    什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...

  9. 顺序容器----顺序容器操作,vector对象如何增长,额外的string操作,容器适配器

    一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_ba ...

随机推荐

  1. 日常英语---九、冒险岛link技能导读

    日常英语---九.冒险岛link技能导读 一.总结 一句话总结:选最值得练的link技能列上来,先熟悉一部分,没必要一开始就全部弄懂,这样压力太大,可以先熟悉比较有意义的一部分啊 学以致用-还不如说成 ...

  2. 书法字帖 PDF转化为可打印PDF

    书法类的PDF,因为底色是黑色的,打印起来特别费墨,所以需要转化成白底黑字的文件, 才好打印. 1)用 pdfbox 的 ExtractImages 命令,抽出所有的图片 https://pdfbox ...

  3. 停止学习框架(Stop Learning Frameworks)

    https://www.cnblogs.com/strick/p/10161733.html

  4. Tomcat基本组件、其功能和处理请求的过程

      一.Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式要求配置在这个顶层容器中 Tomcat的各个组件是 ...

  5. JDK常用工具

    JDK的命令行工具 jps 查看正在使用的jvm机器进程号. 常用命令,-l显示正在运行的jar包或者软件(基于jvm),-v显示当前进程详细的jvm参数 jps -l jps -v javap 反汇 ...

  6. thinkphp5.0写的项目放到服务器上 lnmp 404

    tp5在Nginx上不适用pathinfo格式的url,在项目的Nginx配置文件里找到include enable-php.conf 改为 include enable-php-pathinfo.c ...

  7. day1-6 字符串、列表、元组、字典、类型转换

    day1 1.python历史. 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码. 2.python的环 ...

  8. 3月25 JavaScript 练习题

    一个关于找7的题 <script type="text/javascript" language="javascript"> for(var i=1 ...

  9. python-flask-Flask-SQLAlchemy与Flask-Migrate联合进行数据化迁移

    使用步骤: 1. 引入Flask-SQLAlchemy from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() 2. 注册 Flask-SQ ...

  10. Alibaba Java Coding Guidelines

    阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的<阿里巴巴Java开发规约>扫描插件!该插件由阿里巴巴P3C项目组研发.P3C是世界知名的反潜机,专门对付水下潜水艇,寓意是扫描出 ...