当前位置: 首页 > news >正文

(顺序)容器的好伴侣 --- 容器适配器

前言

  vector容器的数据结构原型是顺序表,它很好的实现了顺序表的功能,大大方便了编程。好了,现在假设有天我又想用栈,那么有没有栈对应的容器呢?很遗憾,木有。但基于“栈”可以由顺序表或者链表实现这一特性,C++提供了stack给我们使用,来解决栈的实现这个问题。stack可不是类,也不是容器,那它是什么呢?它就是本文要讨论的一个新的类型 --- 容器适配器。

什么是容器适配器?

  容器适配器是对容器的一种再封装。不同的容器适配器提供不同的函数,使容器的功能得到全新的特定的扩展。(但它和容器的容器是有区别的:容器适配器不支持迭代器和算法,使用起来限制比较大)。标准库提供了三种容器适配器:queue,stack和priority_queue。

容器适配器怎么用?

  一般来说,先定义一个容器,接着给该容器配备相应的容器适配器,然后就可以使用该容器适配器特有的函数处理数据了。这里可以省略掉容器定义那一步,容器适配器将自动分配容器。下面这个代码示范了栈容器适配器stack的用法。我们先定义一个vector容器,接着给该vector容器分配stack容器适配器,然后使用栈容器提供的函数自顶向下的输出所有元素,解决了前言所提出的问题:

 1 #include <iostream>
 2 #include <vector>
 3 // 使用容器适配器必须包含相应的头文件
 4 #include <stack>
 5   
 6 using namespace std;
 7   
 8 int main()
 9 {
10     vector<int> v;
11     
12     /*
13      * 将0-9存入vector容器并打印
14     */
15     for (int i=0; i<10; i++)
16         v.push_back(i);
17     cout << "输出Vector容器:" << endl;
18     for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
19         cout << *it << " ";
20     cout << endl << endl;
21 
22     // 给容器v配上容器适配器
23     stack< int, vector<int> > s(v);
24     /*
25      * 使用栈容器适配器stack提供的函数处理数据
26     */
27     cout << "自顶向下输出栈( stack容器适配器 ):" << endl;
28     while (!s.empty()) {
29         cout << s.top() << " ";
30         s.pop();
31     }
32     cout << endl;
33 
34     return 0;
35 }

  运行结果:

  

说明

  1. 容器适配器只适用于一定的容器而不是所有容器。

  2. 容器适配器的函数实现其实也是基于其参数容器的函数,而不是自己重新定义的。

 

转载于:https://www.cnblogs.com/scut-fm/p/3221940.html

相关文章:

  • javascript实现自动关闭的alert对话框
  • ASP.NET中上传图片检测其是否为真实的图片 防范病毒上传至服务器
  • cmd命令行中的errorlevel和延迟赋值
  • 我的项目经理2
  • iOS 开发小常识 开发笔记
  • 程序员修炼之道(一)
  • DevExpress.XtraEditors.TextEdit 设为密码输入框
  • 层次遍历二叉树(编程之美3.10)
  • 算法起步之Prim算法
  • 我比谁都相信努力奋斗的意义
  • jsp页面中从forEach里向action里面传递其中的一个对象
  • CentOS版本选择说明
  • 读书笔记——《设计心理学2:如何管理复杂》教你应付复杂
  • 用户故事(User Story)
  • TQ2440开发板移植UBOOT-2010.06总结(3)
  • [NodeJS] 关于Buffer
  • [译] React v16.8: 含有Hooks的版本
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Invalidate和postInvalidate的区别
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Lsb图片隐写
  • React Native移动开发实战-3-实现页面间的数据传递
  • 仿天猫超市收藏抛物线动画工具库
  • 给新手的新浪微博 SDK 集成教程【一】
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 区块链技术特点之去中心化特性
  • 再次简单明了总结flex布局,一看就懂...
  • 自制字幕遮挡器
  • 最近的计划
  • C# - 为值类型重定义相等性
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • "无招胜有招"nbsp;史上最全的互…
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #微信小程序(布局、渲染层基础知识)
  • $.each()与$(selector).each()
  • $forceUpdate()函数
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm码农论坛 毕业设计 231126
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十八)三元表达式和列表解析
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)80c52学习之旅-起始篇
  • .htaccess 强制https 单独排除某个目录
  • .jks文件(JAVA KeyStore)
  • .NET MVC第五章、模型绑定获取表单数据
  • .net6+aspose.words导出word并转pdf
  • .net开发引用程序集提示没有强名称的解决办法
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .net下的富文本编辑器FCKeditor的配置方法