一,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

最新文章

  1. 用kryonet时kryo报buffer underflow错误
  2. AChartEngine 图表绘制
  3. Coder-Strike 2014 - Finals (online edition, Div. 2) B. Start Up
  4. php测试程序运行时间和占用内存情况
  5. HTTPS 升级指南
  6. Maven POM.xml (转)
  7. Android Studio ---------------常用快捷键(更新中。。。。。。)
  8. BOOST 线程完全攻略 - 扩展 - 线程消息通讯
  9. codeforces432D Prefixes and Suffixes(kmp+dp)
  10. ASP.NET Core实现类库项目读取配置文件
  11. JavaScript 数组基本操作
  12. (网页)HTML5
  13. maven ${path.separator}
  14. Oracle表空间管理相关
  15. centos 磁盘清理 /dev/vda1系统盘满了
  16. mpvue使用vant Weapp运行npm run build命令打包后失效
  17. lwip:与tcp发送相关的选项和函数
  18. spring时间管理
  19. python测试开发django-6.模板中include使用
  20. SignalR支持的平台

热门文章

  1. LA 3135 - Argus
  2. Ansible 管理服务和软件
  3. VC6.0 MFC中WebBrowser控件禁止新窗口弹出的解决办法
  4. 【Codeforces Round #439 (Div. 2) C】The Intriguing Obsession
  5. Mybatis全面详解——上(学习总结)
  6. Android 图片压缩,基于比例和质量压缩
  7. php 转义html标签 反转html标签 符号
  8. 【2037】利用字符串处理,输出x+y的结果
  9. LOG4J中日志级别的使用
  10. Linux文件编辑命令具体整理