C++基础13:容器适配器(Container Adapte)
1 简介
容器 | 模板 | 特点 |
---|---|---|
容器 | 模板 | 特点 |
栈容器 | stack | 后进先出(LIFO) |
队列容器 | queue | 先进先出(FIFO) |
优先级队列容器 | priority_queue | 最高优先级元素先出 |
2 栈容器
2.1 常见用法
(1)入栈操作(for循环次数)
for(int i = 0; i<10;++i){s.push(i); //a1.入栈操作(for循环次数)}
(2)出栈操作 ,a. while循环判空;b.只能打印头部
while(!s.empty()){cout << s.top() << "\t";s.pop(); //a2.出栈操作 ,while循环判空;}
(3)不能进行的操作:(栈和vector,list之间的转化)
b1.不能随机访问s[]
b2.不能使用迭 stack::iterator it = s.begin();
b3.不能使用 for(auto m:s){}进行遍历
(4)解决之道:将栈转化为顺序容器(vector,list,dequeue)
c1.强制类型转化符号vector---->stack
vector<int> vec ={1,2,3,4,5};
stack<int,vector<int>> s1(vec); //c1强制类型转化符号vector---->stack
c2.采用push_back加pop()的做法,实现了逆序打印
vector<int> res;while(!s1.empty()){res.push_back(s1.top()); //c2.采用push_back加pop()的做法,实现了逆序打印s1.pop();}for(auto m:res){ //c3.vectorcout << m << "\t" ;}
- 完整案例
#include <iostream>
#include <stack>
#include <vector>
using namespace std;int main()
{stack<int> s;for(int i = 0; i<10;++i){s.push(i); //a1.入栈操作(for循环次数)}cout << s.size() << endl;;while(!s.empty()){cout << s.top() << "\t";s.pop(); //a2.出栈操作 ,while循环判空;}cout << endl;cout << s.size() << endl;// b不能进行的操作://b1.不能随机访问s[]//b2.不能使用迭代器//stack<int>::iterator it = s.begin();//b3.不能使用 for(auto m:s){}进行遍历//c.解决之道:将栈转化为顺序容器(vector,list,dequeue)vector<int> vec ={1,2,3,4,5};stack<int,vector<int>> s1(vec); //c1强制类型转化符号vector---->stackvector<int> res;while(!s1.empty()){res.push_back(s1.top()); //c2.采用push_back加pop()的做法,实现了逆序打印s1.pop();}for(auto m:res){ //c3.vectorcout << m << "\t" ;}cout << endl;return 0;
}
2.2 面试题
2.2.1 (面试题24)翻转链表
翻转链表
3 队列容器
3.1 常见用法
(1) 入队操作
for(int i = 0; i<10;++i){q.push(i); //a1.入队操作(for循环次数)}
(2) 出队操作 ,while循环判空; ,可以打印首尾
while(!q.empty()){cout << q.front() << "\t" << q.back()<<endl;q.pop(); //a2.出队操作 ,while循环判空; ,可以打印首尾}
(3)队列和容器(list,vector)的转化
b不能进行的操作:
//b1.不能随机访问s[]
//b2.不能使用迭代器
//queue::iterator it = s.begin();
//b3.不能使用 for(auto m:s){}进行遍历
//c.解决之道:将栈转化为顺序容器(list,dequeue)
list<int> l ={1,2,3,4,5};queue<int,list<int>> q1(l); //c1强制类型转化符号list---->queue
(4)出队
while(!q1.empty()){cout << q1.front() << "\t" << q1.back()<<endl;q1.pop(); //a2.出栈操作 ,while循环判空;}
- 完整案例
#include <iostream>
#include <queue>
#include <list>
using namespace std;int main()
{queue<int> q;for(int i = 0; i<10;++i){q.push(i); //a1.入队操作(for循环次数)}cout << q.size() << endl;;while(!q.empty()){cout << q.front() << "\t" << q.back()<<endl;q.pop(); //a2.出队操作 ,while循环判空; ,可以打印首尾}cout << endl;cout << q.size() << endl;// b不能进行的操作://b1.不能随机访问s[]//b2.不能使用迭代器//queue<int>::iterator it = s.begin();//b3.不能使用 for(auto m:s){}进行遍历//c.解决之道:将队列转化为顺序容器(list,dequeue,vector)list<int> l ={1,2,3,4,5};queue<int,list<int>> q1(l); //c1强制类型转化符号list---->queuewhile(!q1.empty()){cout << q1.front() << "\t" << q1.back()<<endl;q1.pop(); //a2.出栈操作 ,while循环判空;}cout << endl;return 0;
}
C++基础13:容器适配器(Container Adapte)相关推荐
- c++基础:8.2.5_容器适配器(Container Adapte)
文章目录 1 简介 (***)2 栈容器 2.1 常见用法 2.2 面试题 2.2.1 (面试题24)翻转链表 方法1:将链表转化为stack 方法2:将链表转化为vector (***)3 队列容器 ...
- Docker基础之容器(container)创建命令
一.Docker基础之容器(container)创建命令的用法 docker container create --name myetcd etcd_cluster:gc4.0 create命令完成的 ...
- [C++](13)stack queue priority_queue 模拟实现:容器适配器,deque介绍,仿函数详解
文章目录 使用 stack 栈 queue 队列 priority_queue 优先级队列 什么是容器适配器? deque 容器简单介绍 模拟实现 stack queue priority_queue ...
- C++的三种容器适配器
1.对容器适配器的理解 C++提供了三种容器适配器(container adapter): stack,queue和priority_queue. stack和queue基于deque实现,prior ...
- C++ STL : 模拟实现STL中的容器适配器priority_queue
目录 priority_queue 文档介绍 实现思路 思路 仿函数 实现 priority_queue 文档介绍 文档介绍 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含 ...
- C++ STL : 模拟实现STL中的容器适配器stack和queue
目录 什么是容器适配器 stack stack的文档介绍-(来自cplusplus) stack的实现 queue queue的文档介绍-(来自cplusplus) queue的实现 什么是容器适配器 ...
- C++ 容器适配器(stack、queue、priority_queue)
容器适配器 首先,我们要明白适配器是干什么的?其实就是一个接口转换装置,是得我们能用特定的方法去操作一些我们本来无法操作的东西.举一个例子,比如你的一个设备支持串口线,而你的电脑支持的是usb口,这时 ...
- 5.1 c++ STL 容器适配器简介
1. 适配器简介 在详解什么是容器适配器之前,初学者首先要理解适配器的含义. 其实,容器适配器中的"适配器",和生活中常见的电源适配器中"适配器"的含义非常接近 ...
- 第03章 Go语言容器(container)
变量在一定程度上能满足函数及代码要求.如果编写一些复杂算法.结构和逻辑,就需要更复杂的类型来实现.这类复杂类型一般情况下具有各种形式的存储和处理数据的功能,将它们称为"容器(containe ...
最新文章
- edem颗粒替换_EDEM后处理问题的大汇总,方便易懂!
- cordic ip核 vivado_Xilinx Vivado CORDIC IP求解atan 反正切
- 有什么用_app用什么软件编写
- vmware嵌套虚拟化对服务器的影响,VMware 虚拟机嵌套部署 KVM 虚拟机小结
- Community Server架构:博客业务详细分析(转)
- 安卓开发:用ImageView放上图片后上下有间隙
- CUDA编译器nvcc的用法用例与问题简答
- 重新开始我的blog内容!
- Python的7大就业方向,转行的人适合哪个方向?学了Python能干什么?
- 移动终端安全威胁与应对措施
- jw播放器 html5,JW播放器HTML5专用模式
- CSS3+jquery实现图片万花筒3D旋转动画特效
- CentOS Stream 9 下如何安装使用花生壳并做内网穿透建站
- 喵哈哈村的魔法考试 Round #6 (Div.3) 题解
- 如何正确理解「指标」和「标签」
- Open Cascade 多视图-多个3D视图
- 1007. Maximum Subsequence Sum (25)-PAT甲级真题(最大连续子序列和、动态规划dp)
- 英首相:比起无协议脱欧 国会阻挠脱欧可能性更高
- 微创新:5种微笑改变创造伟大产品
- Java(JCo3)与SAP系统相互调用
热门文章
- 网络工程师-计算题-专题
- identity4使用mysql_IdentityServer4-从数据库获取User登录并对Claims授权验证(五)
- 终端命令 解决Mac OS X 10.8 休眠 WiFi 自动断网QQ自动掉线问题
- 顶尖作品集封面封底来了 共28套
- 电脑重装系统后电脑黑屏有光标怎么回事
- 101 个 MySQL 的调节和优化的提示
- bilibili_Linux7_用户和用户组管理
- 迷你linux操作系统,使用busybox做一个小巧的Linux操作系统
- SSL 链接安全协议的enum
- 【Linux防火墙】网络ip和端口管理