当前位置: 首页 > news >正文

9.6 容器适配器

文章目录

      • 定义一个适配器
      • stack
      • 队列适配器
      • queue
      • priority_queue 优先队列

  1. 适配器是标准库的一个通用概念,容器、迭代器和函数等都有适配器。适配器是一种机制,接受一种已有容器类型。
  2. 标准库有三个顺序容器适配器:stack,queue和priority_queue。

所有容器适配器支持的操作:

size_type      //一种类型,足以保存当前类型最大对象的的大小
value_type     //元素的类型
container_type //实现适配器的底层容器类型
A a;           //创建一个名为a的空适配器
A a(c);        //创建一个名为a的适配器,内部含有容器c的拷贝
关系运算符      // ==,!=,<,<=,>,>=
a.empty();     //若a包含元素则返回false,否则则是true 
a.size();      //返回a中元素的数目
swap(a,b);     //交换a,b的内容,前提是a,b必须有相同的类型,包括底层容器类型也必须一致。
a.swap(b);     //交换a,b的内容,前提是a,b必须有相同的类型,包括底层容器类型也必须一致。

定义一个适配器

//可以采用对应容器初始化适配器
deque<int> deq;
stack<int> stk(deq);

/*可以适配器将所用顺序容器作为第二个参数,什么意思呢?具体解释就是stack默认是基于deque实现
的,但是我们这里需要将该stack的使用指向vector,所以就需要使用其重载函数,指向vector的函数。
在例子的下面将给出理解图*/
vector<int> svec;
stack<string,vector<string>> stk_stk(svec);

//eg:stack<value_type,container_type>
	deque<int> dq1= { 1,2,3,4 };
	vector<int> vec1 = { 2,3,4,5 };
	stack<int> stk1(dq1);
	stack<int, deque<int>> stk2(dq1);
	stack<int, vector<int>>stk3(vec1);
	stack<int> stk4; //默认deque

理解图:
在这里插入图片描述

stack

  1. 头文件在同名头文件中。
  2. stack默认基于deque实现,因为只要求push_back、pop_back和back操作,可以使用除array和forward_list之外的容器实现。
  3. 先进后出。

具体的使用:

//stack基于deque实现,也可以在list和vector上实现,当然需要使用其重载函数。
stack<int> stk;
stk.push(ix);     //拷贝ix,从而创建一个新的对象,压入栈顶。
stk.empalce(arg); //构造arg,从而创建一个新的对象,压入栈顶。
stk.pop();        //删除栈顶元素,但是不返回其值
stk.top();        //返回栈顶元素,但是不将其删除
等等

关于push和emplace的差别:链接

队列适配器

  1. queue和priority_queue适配器定义在queue的头文件中

queue

  1. queue默认基于deque实现,要求back、front、push_back、push_front、pop_back、pop_front,可以使用list和deque实现,不能用vector(vector和string不支持push_front)。
  2. 先进先出。
//queue基于deque实现,也可以用于vector和list,当然需要用到重载
q.front()//返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
q.back()//返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
q.push(ix)//在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
q.pop()//删除 queue 中的第一个元素,注意是第一个。
q.size()//返回 queue 中元素的个数。
q.empty()//如果 queue 中没有元素的话,返回 true。
q.emplace()//用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。

使用样例:链接

priority_queue 优先队列

  1. priority_queue默认基于vector实现,除front、pop_back、push_back外还需要随机访问的能力,可以用vector、deque实现,不能用list。
//priority_queue基于vector实现,也可以用于deque
q.pop()//删除优先级最高的元素
q.top()//返回最高优先级元素
q.push(ix)
q.emplace(args)

priority_ queue 允许我们为队列中的元素建立优先级。新加入的元素会排在所有优先级比它低的已有元素之前。饭店按照客人预定时间而不是到来时间的早晚来为他们安排座位,就是一个优先队列的例子。默认情况下,标准库在元素类型上使用<运算符来确定相对优先级。

使用样例:链接

相关文章:

  • asp做网站技术怎样/国外网站推广平台有哪些?
  • 网站建设与运营市场风险/微信管理系统平台
  • 那家b2c网站建设报价/近期网络营销的热点事件
  • seo顾问服务 乐云践新专家/山西优化公司
  • wap的网站/百度关键词优化送网站
  • 中英文网站建设报价/本地推广平台有哪些
  • MATLAB算法实战应用案例精讲-【图像处理】小目标检测(补充篇)(附python代码实现)
  • chrono_duration(一)
  • 《Linux Shell脚本攻略》学习笔记-第一章
  • [LeetCode]-动态规划-3
  • Cadence OrCAD: 跨页符和电源符号命名优先级的一个小问题
  • LeetCode分类刷题----哈希表篇
  • 2023牛客寒假算法基础集训营1(10/13)
  • centos7源码编译tensorflow2.10.0
  • 从汇编的角度了解C++原理——new和malloc的区别
  • Dubbo 自适应SPI
  • 微信小程序登陆,后端接口实现 - springboot
  • echarts柱状图值为0时不显示以及柱状图百分比展示