一,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. amazeui页面分析4

    amazeui页面分析4 一.总结 1.直接照着作者的设计思路用:例如 pet_hd_con_time pet_hd_con_map ,这是time 和 map,那我别的说不定也可以直接用,比如aut ...

  2. sum()函数——MATLAB

    a=sum(A)  %列求和 b=sum(A,2) %行求和 c=sum(A(:)) %矩阵求和 假定A为一个矩阵: sum(A)以矩阵A的每一列为对象,对一列内的数字求和. sum(A,2)以矩阵A ...

  3. MySql Order By 多个字段 排序规则

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xlxxcc/article/details/52250963 说在前面 突发奇想,想了解一下mysq ...

  4. matplotlib学习之散点图与条形图

    # coding:utf-8 from matplotlib import pyplot as plt import numpy as np plt.style.use('ggplot') x = n ...

  5. spring(3)------控制反转(IOC)/依赖注入(DI)

    一.spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control).它把传统上由程序代码直接操控的对象的调用权交给容器.通过容器来实现对象组件的装配和管理. 所谓 ...

  6. XHTML 结构化:使用 XHTML 重构网站 分类: C1_HTML/JS/JQUERY 2014-07-31 15:58 249人阅读 评论(0) 收藏

    http://www.w3school.com.cn/xhtml/xhtml_structural_01.asp 我们曾经为本节撰写的标题是:"XHTML : 简单的规则,容易的方针.&qu ...

  7. bash - Logical_OR

    转载 https://bash.cyberciti.biz/guide/Logical_OR Logical OR   ← Logical AND Home Logical Not ! → Logic ...

  8. 详解springmvc控制登录用户session失效后跳转登录页面

    springmvc控制登录用户session失效后跳转登录页面,废话不多少了,具体如下: 第一步,配置 web.xml <session-config> <session-timeo ...

  9. POJ - 2236Wireless Network-并查集

    id=11125" target="_blank" style="color:blue; text-decoration:none">POJ - ...

  10. 【hdu 2594】Simpsons’ Hidden Talents

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...