一,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之适配器的更多相关文章

  1. ###STL学习--适配器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-24 #@email: forgerui@gmail.com STL中的适配器. ###stl学习 |--迭代 ...

  2. STL函数适配器

    一:适配器简介 C++中有三类适配器,分别是容器适配器,迭代器适配器和函数适配器,这里主要介绍函数适配器. (一)函数适配器简介 STL中已经定义了大量的函数对象,但是有时候需要对函数返回值进行进一步 ...

  3. STL 函数适配器(function adapter)

    函数适配器(function adapter):通过不同函数适配器的绑定,组合和修饰能力,可以实现强大的功能,配合STL泛型算法完成复杂功能. 绑定(bind) template <class ...

  4. STL容器适配器 stack, queue

    stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...

  5. c++ STL容器适配器

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

  6. STL 迭代器适配器(iterator adapter)

    iterator adapter graph LR iterator --- reverse_iterator iterator --- Insert_iterator iterator --- io ...

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

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

  8. STL源码标注_空间适配器

    /* stl_alloc.h */ SGI STL空间适配器的主要由alloc.h和stl_alloc.h实现 SGI STL空间适配器的核心: 第一级适配器__malloc_alloc_templa ...

  9. C++ Standard Template Library STL(undone)

    目录 . C++标准模版库(Standard Template Library STL) . C++ STL容器 . C++ STL 顺序性容器 . C++ STL 关联式容器 . C++ STL 容 ...

随机推荐

  1. 学习redis--简介(一)

    1.什么是redis? Redis是使用c语言开发的一个高性能键值数据库.Redis通过键值类型来存储数据.它通过提供多种键值数据类型来适应不同场景的存储需求. 2.redis支持哪些数据类型 Key ...

  2. linux 内核源代码目录结构

    /arch:目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录.PC机一般都基于此目录. / ...

  3. Windows下Nginx的下载安装、启动停止和配置浏览

    前言: 记录一下今天在Windows下载安装Nginx服务器的过程.因为网上关于Nginx的资料都太复杂了,大多数是在Linux下使用的方法. 1.下载 Nginx官网下载地址:http://ngin ...

  4. proxool数据库连接池用法

    今天给大家介绍一种新的数据连接池实现方式--proxool数据库连接池,这是一个健壮.易用的连接池.以下通过一个Demo说明一下怎样使用: 项目结构例如以下: DBLink.java文件里的代码: p ...

  5. 小小ARC造福无数码农

    今天无意中看到非常久之前的一个项目,古老的语法规范,还有更让人战战兢兢"内存管理代码"! 在这不得不说OC中内存管理的三种分类: Mannul Reference Counting ...

  6. js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么

    js课程 3-10  js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...

  7. swift学习第十天:函数

    函数的介绍 函数相当于OC中的方法 函数的格式如下 func 函数名(参数列表) -> 返回值类型 { 代码块 return 返回值 } func是关键字,多个参数列表之间可以用逗号(,)分隔, ...

  8. Vue.js开发环境搭建的介绍

    包含了最基础的Vue.js的框架,包含了打包工具和测试工具,开发调试的最基本的服务器,不需要关注细节,只需关注Vuejs对项目的实现 npm在国内的网络使用较慢,所以推荐下载安装淘宝的镜像 1: 2: ...

  9. 【solr基础教程之九】客户端 分类: H4_SOLR/LUCENCE 2014-07-30 15:28 904人阅读 评论(0) 收藏

    一.Java Script 1.由于Solr本身可以返回Json格式的结果,而JavaScript对于处理Json数据具有天然的优势,因此使用JavaScript实现Solr客户端是一个很好的选择. ...

  10. 为什么位运算可以实现加法(1、 不考虑进位的情况下位运算符中的异或^可以表示+号)(2、 位运算符中的与运算符&和左移运算符<<可以模拟加法中的进位)(3、位运算不仅可以做加法,还可以做其它的乘法减法等:计算机本质是二进制运算)

    为什么位运算可以实现加法(1. 不考虑进位的情况下位运算符中的异或^可以表示+号)(2. 位运算符中的与运算符&和左移运算符<<可以模拟加法中的进位)(3.位运算不仅可以做加法,还 ...