一,STL适配器简介

1.什么是适配器

  STL提供了序列式容器,同时针对序列式容器提供了应用于不同场景的容器适配器,通俗讲适配器就是以序列式容器为底层数据结构,进一步封装了的为适应场景应用的容器。STL中提供了三种适配器,分别为stack,queue和priority_queue。

二,堆栈(stack)

1.堆栈的基本概念

  • stack是一种“先进后出”的容器。
  • stack的默认底层数据结构是使用的deque。因此其本质是简单装饰了deque容器而形成的一种新容器。
  • 使用堆栈容器,首先要引入头文件# include<stack>。

2.stack的构造函数

  1. // stack的默认构造函数
  2. stack<char> s1;
  3. // 压栈
  4. s1.push('A');
  5. s1.push('B');
  6. s1.push('C');
  7. // stack的拷贝构造函数
  8. stack<char> s2 = s1;

3.stack的操作符重载

  1. // stack的默认构造函数
  2. stack<char> s1;
  3. // 压栈
  4. s1.push('A');
  5. s1.push('B');
  6. s1.push('C');
  7. // stack的拷贝构造函数
  8. stack<char> s2;
  9. // 赋值操作符重载
  10. s2 = s1;

4.stack的成员函数

  1. // stack的默认构造函数
  2. stack<char> s1;
  3. // 压栈
  4. s1.push('A');
  5. s1.push('B');
  6. s1.push('C');
  7. // 判断栈是否为空
  8. while (!s1.empty())
  9. {
  10. // 获取栈顶元素
  11. char top = s1.top();
  12. // 输出栈顶元素
  13. cout << "top = " << top << endl;
  14. // 弹栈:将栈顶元素弹出
  15. s1.pop();
  16. }
  17. // 获取栈的长度
  18. int size = s1.size();
  19. cout << "size = " << size << endl;

三,队列(queue)

1.队列的基本概念

  • 队列(queue)是一种“先进先出”的容器。
  • 队列(queue)是简单的装饰了“deque”容器而形成的一种新的容器。
  • 使用队列,要先引入头文件# include<queue>。

2.queue的构造函数

  1. // 无参构造函数
  2. queue<int> q1;
  3. // 队尾添加元素
  4. q1.push();
  5. q1.push();
  6. q1.push();
  7. // 拷贝构造函数
  8. queue<int> q2 = q1;

3.queue的操作符重载

  1. // 无参构造函数
  2. queue<int> q1;
  3. // 队尾添加元素
  4. q1.push();
  5. q1.push();
  6. q1.push();
  7. // 无参构造函数
  8. queue<int> q2;
  9. // 赋值操作符重载
  10. q2 = q1;

4.queue的成员函数

  1. // 无参构造函数
  2. queue<int> q1;
  3. // 队尾添加元素
  4. q1.push();
  5. q1.push();
  6. q1.push();
  7. q1.push();
  8. q1.push();
  9. q1.push();
  10. // 判断队列是否为空
  11. while (!q1.empty())
  12. {
  13. // 获取队列头部元素
  14. int first = q1.front();
  15. // 获取队列尾部元素
  16. int last = q1.back();
  17. // 输出头部和尾部元素
  18. cout << "first = " << first << ",last = " << last << endl;
  19. // 移除头部元素
  20. q1.pop();
  21. }
  22. // 获取队列的长度
  23. int size = q1.size();
  24. cout << "size = " << size << endl;

四,优先级队列(priority_queue)

1.优先级队列的基本知识

  • 优先级队列是一种特殊的队列,它能够在队列中进行排序,默认的优先级队列是最大值优先级队列,即最大的元素在队列的头部。
  • 优先级队列底层实现结构是vector,还可以使用deque,但是不能使用list。
  • 优先级队列使用的# include<queue>头文件和对列是一个头文件。
  • 优先级队列使用的是堆排序。
  • 除了与在构造队列时的不同,其他的操作都相同。

2.优先级队列代码示例

  1. // 默认是最大值优先级队列
  2. priority_queue<int> pq1;
  3. // 这是最大值优先级队列的另一种写法
  4. priority_queue<int, vector<int>, less<int>> pq2;
  5. // 这是最小值优先级队列
  6. priority_queue<int, vector<int>, greater<int>> pq3;
  7.  
  8. // 往最大值优先级队列添加元素
  9. pq2.push();
  10. pq2.push();
  11. pq2.push();
  12. pq2.push();
  13. // 判断是否为空
  14. while (!pq2.empty())
  15. {
  16. // 获取头部元素
  17. int top = pq2.top();
  18. // 输出
  19. cout << "top = " << top << endl;
  20. // 弹出头部元素
  21. pq2.pop();
  22. }
  23. // 输出结果为: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. vim编辑器经常使用命令

    高级一些的编辑器,都会包括宏功能,vim当然不能缺少了.在vim中使用宏是很方便的: :qx     開始记录宏,并将结果存入寄存器xq     退出记录模式@x     播放记录在x寄存器中的宏命令 ...

  2. ZOJ 2850和ZOJ 1414

    下午上数据结构,结果竟然没有新题.T T果断上OJ来水一发 ZOJ 2850   Beautiful Meadow 传送门http://acm.zju.edu.cn/onlinejudge/showP ...

  3. ios获取系统时间

    //获取系统时间 NSDate * date=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; ...

  4. Android5.0(Lollipop) BLE蓝牙4.0+浅析概念(四)

    作者:Bgwan链接:https://zhuanlan.zhihu.com/p/23679793来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 置顶:此文转载CSDN博 ...

  5. 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏

    一.决策树 决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中 推理出以决策树表示的分类规则.构造决策树的目的是找出属性和类别间的关系, ...

  6. C#的Timer(很多相关文章)

    再C#里现在有3个Timer类: System.Windows.Forms.Timer System.Threading.Timer System.Timers.Timer 这三个Timer我想大家对 ...

  7. Android屏幕信息获取

    Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面. 1.getMetrics Displa ...

  8. js进阶 12-4 jquery键盘事件如何使用

    js进阶 12-4 jquery键盘事件如何使用 一.总结 一句话总结:键盘和鼠标都是外设输入设备,所以函数很像,所以使用就像鼠标事件click一样 1.jquery键盘事件有哪三个? 1(up和do ...

  9. ios开发runtime学习三:动态添加方法(实际应用少,面试)

    #import "ViewController.h" #import "Person.h" /* 1: Runtime(动态添加方法):OC都是懒加载机制,只要 ...

  10. 在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--> ...