STL之适配器
一,STL适配器简介
1.什么是适配器
STL提供了序列式容器,同时针对序列式容器提供了应用于不同场景的容器适配器,通俗讲适配器就是以序列式容器为底层数据结构,进一步封装了的为适应场景应用的容器。STL中提供了三种适配器,分别为stack,queue和priority_queue。
二,堆栈(stack)
1.堆栈的基本概念
- stack是一种“先进后出”的容器。
- stack的默认底层数据结构是使用的deque。因此其本质是简单装饰了deque容器而形成的一种新容器。
- 使用堆栈容器,首先要引入头文件# include<stack>。
2.stack的构造函数
- // stack的默认构造函数
- stack<char> s1;
- // 压栈
- s1.push('A');
- s1.push('B');
- s1.push('C');
- // stack的拷贝构造函数
- stack<char> s2 = s1;
3.stack的操作符重载
- // stack的默认构造函数
- stack<char> s1;
- // 压栈
- s1.push('A');
- s1.push('B');
- s1.push('C');
- // stack的拷贝构造函数
- stack<char> s2;
- // 赋值操作符重载
- s2 = s1;
4.stack的成员函数
- // stack的默认构造函数
- stack<char> s1;
- // 压栈
- s1.push('A');
- s1.push('B');
- s1.push('C');
- // 判断栈是否为空
- while (!s1.empty())
- {
- // 获取栈顶元素
- char top = s1.top();
- // 输出栈顶元素
- cout << "top = " << top << endl;
- // 弹栈:将栈顶元素弹出
- s1.pop();
- }
- // 获取栈的长度
- int size = s1.size();
- cout << "size = " << size << endl;
三,队列(queue)
1.队列的基本概念
- 队列(queue)是一种“先进先出”的容器。
- 队列(queue)是简单的装饰了“deque”容器而形成的一种新的容器。
- 使用队列,要先引入头文件# include<queue>。
2.queue的构造函数
- // 无参构造函数
- queue<int> q1;
- // 队尾添加元素
- q1.push();
- q1.push();
- q1.push();
- // 拷贝构造函数
- queue<int> q2 = q1;
3.queue的操作符重载
- // 无参构造函数
- queue<int> q1;
- // 队尾添加元素
- q1.push();
- q1.push();
- q1.push();
- // 无参构造函数
- queue<int> q2;
- // 赋值操作符重载
- q2 = q1;
4.queue的成员函数
- // 无参构造函数
- queue<int> q1;
- // 队尾添加元素
- q1.push();
- q1.push();
- q1.push();
- q1.push();
- q1.push();
- q1.push();
- // 判断队列是否为空
- while (!q1.empty())
- {
- // 获取队列头部元素
- int first = q1.front();
- // 获取队列尾部元素
- int last = q1.back();
- // 输出头部和尾部元素
- cout << "first = " << first << ",last = " << last << endl;
- // 移除头部元素
- q1.pop();
- }
- // 获取队列的长度
- int size = q1.size();
- cout << "size = " << size << endl;
四,优先级队列(priority_queue)
1.优先级队列的基本知识
- 优先级队列是一种特殊的队列,它能够在队列中进行排序,默认的优先级队列是最大值优先级队列,即最大的元素在队列的头部。
- 优先级队列底层实现结构是vector,还可以使用deque,但是不能使用list。
- 优先级队列使用的# include<queue>头文件和对列是一个头文件。
- 优先级队列使用的是堆排序。
- 除了与在构造队列时的不同,其他的操作都相同。
2.优先级队列代码示例
- // 默认是最大值优先级队列
- priority_queue<int> pq1;
- // 这是最大值优先级队列的另一种写法
- priority_queue<int, vector<int>, less<int>> pq2;
- // 这是最小值优先级队列
- priority_queue<int, vector<int>, greater<int>> pq3;
- // 往最大值优先级队列添加元素
- pq2.push();
- pq2.push();
- pq2.push();
- pq2.push();
- // 判断是否为空
- while (!pq2.empty())
- {
- // 获取头部元素
- int top = pq2.top();
- // 输出
- cout << "top = " << top << endl;
- // 弹出头部元素
- pq2.pop();
- }
- // 输出结果为:3,2,1,0
STL之适配器的更多相关文章
- ###STL学习--适配器
点击查看Evernote原文. #@author: gr #@date: 2014-08-24 #@email: forgerui@gmail.com STL中的适配器. ###stl学习 |--迭代 ...
- STL函数适配器
一:适配器简介 C++中有三类适配器,分别是容器适配器,迭代器适配器和函数适配器,这里主要介绍函数适配器. (一)函数适配器简介 STL中已经定义了大量的函数对象,但是有时候需要对函数返回值进行进一步 ...
- STL 函数适配器(function adapter)
函数适配器(function adapter):通过不同函数适配器的绑定,组合和修饰能力,可以实现强大的功能,配合STL泛型算法完成复杂功能. 绑定(bind) template <class ...
- STL容器适配器 stack, queue
stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...
- c++ STL容器适配器
一.标准库顺序容器适配器的种类 标准库提供了三种顺序容器适配器:queue(FIFO队列).priority_queue(优先级队列).stack(栈) 二.什么是容器适配器 &q ...
- STL 迭代器适配器(iterator adapter)
iterator adapter graph LR iterator --- reverse_iterator iterator --- Insert_iterator iterator --- io ...
- STL之容器适配器queue的实现框架
说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是怎样借助基础容器实现一种经常使用的数据结构stack (栈),本文介绍下第二种STL ...
- STL源码标注_空间适配器
/* stl_alloc.h */ SGI STL空间适配器的主要由alloc.h和stl_alloc.h实现 SGI STL空间适配器的核心: 第一级适配器__malloc_alloc_templa ...
- C++ Standard Template Library STL(undone)
目录 . C++标准模版库(Standard Template Library STL) . C++ STL容器 . C++ STL 顺序性容器 . C++ STL 关联式容器 . C++ STL 容 ...
随机推荐
- vim编辑器经常使用命令
高级一些的编辑器,都会包括宏功能,vim当然不能缺少了.在vim中使用宏是很方便的: :qx 開始记录宏,并将结果存入寄存器xq 退出记录模式@x 播放记录在x寄存器中的宏命令 ...
- ZOJ 2850和ZOJ 1414
下午上数据结构,结果竟然没有新题.T T果断上OJ来水一发 ZOJ 2850 Beautiful Meadow 传送门http://acm.zju.edu.cn/onlinejudge/showP ...
- ios获取系统时间
//获取系统时间 NSDate * date=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; ...
- Android5.0(Lollipop) BLE蓝牙4.0+浅析概念(四)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/23679793来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 置顶:此文转载CSDN博 ...
- 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏
一.决策树 决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中 推理出以决策树表示的分类规则.构造决策树的目的是找出属性和类别间的关系, ...
- C#的Timer(很多相关文章)
再C#里现在有3个Timer类: System.Windows.Forms.Timer System.Threading.Timer System.Timers.Timer 这三个Timer我想大家对 ...
- Android屏幕信息获取
Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面. 1.getMetrics Displa ...
- js进阶 12-4 jquery键盘事件如何使用
js进阶 12-4 jquery键盘事件如何使用 一.总结 一句话总结:键盘和鼠标都是外设输入设备,所以函数很像,所以使用就像鼠标事件click一样 1.jquery键盘事件有哪三个? 1(up和do ...
- ios开发runtime学习三:动态添加方法(实际应用少,面试)
#import "ViewController.h" #import "Person.h" /* 1: Runtime(动态添加方法):OC都是懒加载机制,只要 ...
- 在Eclipse中运行hadoop程序 分类: A1_HADOOP 2014-12-14 11:11 624人阅读 评论(0) 收藏
1.下载hadoop-eclipse-plugin-1.2.1.jar,并将之复制到eclipse/plugins下. 2.打开map-reduce视图 在eclipse中,打开window--> ...