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 容 ...
随机推荐
- Android 用SQLite 使用 CursorLoader 中的数据填充列表视图
我做了简单的测试应用程序基于此示例.有一个按钮,插入到数据库和列表视图的数据.都是在 MainActivity 中.在原来的代码是restartLoader() 仅从调用 onResume() ,但它 ...
- 搭建MHA问题汇总
1,Can't exec "mysqlbinlog": No such file or directory at /usr/share/perl5/vendor_perl/MHA/ ...
- MapReduce 图解流程
Anatomy of a MapReduce Job In MapReduce, a YARN application is called a Job. The implementation of t ...
- PHP 正则截取符合条件的字符串成为数组
$str2 = '<p>678678<em>111111<img src="http://www.XXX.top/upload/image/20180709/1 ...
- 细说HTML头部标签
原文 简书原文:https://www.jianshu.com/p/4270b1d1037d 大纲 1.头部标签列表 2.头部标签详解 1.头部标签列表 <!DOCTYPE html> & ...
- angular之Http服务
原文 https://www.jianshu.com/p/53e4a4bfad7d 大纲 1.什么是angular服务 2.服务的类别 3.认识angular的Http请求 4.简单实例 5.angu ...
- ds finder 唤醒
http://www.hangge.com/blog/cache/detail_594.html
- JSON序列化自己主动过滤NULL值
使用Newtonsoft.Json.dll 序列化为json时主动将NULL值过滤掉.详细做法: var jSetting = new JsonSerializerSettings {NullValu ...
- php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort)
php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort) 一.总结 核心是排序 ...
- 【u015】兽径管理
[问题描述] 约翰农场的牛群希望能够在 N 个(1<=N<=200)草地之间任意移动.草地的编号由 1到N.草地之间有树林隔开.牛群希望能够选择草地间的路径,使牛群能够从任一 片草地移动到 ...