您当前的位置: 首页 >  容器

我什么都布吉岛

暂无认证

  • 1浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

容器适配器

我什么都布吉岛 发布时间:2021-08-29 16:44:44 ,浏览量:1

C++顺序容器的底层能够模拟一些常见的数据结构,方法是通过容器适配器。在这里插入图片描述

队列(queue)只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);队列具有先进先出(FIFO)的特性。(插入和删除操作在不同端口);

堆栈(stack)插入和删除操作都在同一端进行,像是容器,只允许在顶部进行操作,因此操作端口也被称为栈顶(top)。其特点是后进先出(LIFO);

优先队列(priority_queue)中的每个元素都有优先级,而优先级高(或者低)的将会先出队,而优先级相同的则按照其在优先队列中的顺序依次出队。

队列插入删除分属两个不同的端口,堆栈则是同一端口。

顺序容器中有些容器对pop_backpop_front支持度不一样,有些只支持其中的一种,或者一个都不支持(array),需要注意的是,他们都不返回被处理的元素,有些事物可能需要在弹出的同时返回这个数据,这就让用户提前存好这个数据的额外操作,那么有没有一种更加简单的方法?有的,那就是容器适配器!

标准库定义了三个顺序容器适配器stack queue priority_queue。适配器是标准库中的一个通用概念。容器、迭代器和函数都有适配器。适配器就是数据结构,数据结构需要建立在容器之上。所以要求容器能够满足适配器抽象需求的功能

适配器有以下操作:

操作含义empty()是否为空size()适配器大小swap() swap(a,b)交换A a默认构造A a(b)拷贝构造

对于适配器支持的顺序容器:

适配器类/顺序容器类型arrayvectordequelistforward_liststack × \boldsymbol \times × ✓ \checkmark ✓ ✓ \checkmark ✓(默认) ✓ \checkmark ✓ × \boldsymbol \times ×queue × \boldsymbol \times × × \boldsymbol \times × ✓ \checkmark ✓(默认) ✓ \checkmark ✓ × \boldsymbol \times ×priority_queue × \boldsymbol \times × ✓ \checkmark ✓(默认) × \boldsymbol \times × × \boldsymbol \times × × \boldsymbol \times × 一、栈适配器

栈(stack)是限定只在表尾进行插入和删除操作的一种线性表。允许插入或删除的那一端称为栈顶(top),另一端叫做栈底(bottom)。后进先出(Last In First out,LIFO)最能形容栈的特点。通常意义上说,栈支持以下操作:

  • 压入栈顶(push)
  • 删除栈顶(pop)
  • 访问栈顶(top)

C++可以直接使用vector进行等价实现,push_back(push),top(back()),pop_back(pop)看上去非常不直观,而且用户可能会利用vector的其他操作破坏这种栈机制。头文件#include

适配器会限制一些功能以达到用户想要的数据结构,为什么叫做适配器,因为它将一个通用容器,适配成我们想要的结构。不是所有的顺序容器都能适配,stack需要满足以下条件:

  • push_back
  • pop_back
  • back

stack适配器有两个构造函数,一是默认构造函数,二是接受一个容器,拷贝初始化这个stack.

定义stack适配器实例:

#include 
#include 
#include 

using namespace std;

int main()
{
    std::stack s;//默认构造
    s.push(3);
    s.push(4);
    s.push(5);
    s.pop();
    std::cout            
关注
打赏
1658157489
查看更多评论
0.0391s