zoukankan      html  css  js  c++  java
  • C++基础之适配器

    什么是容器适配器?

    ”适配器是使一种事物的行为类似于另外一种事物行为的一种机制”,适配器对容器进行包装,使其表现出另外一种行为。例如,stack<int, vector<int> >实现了栈的功能,但其内部使用顺序容器vector<int>来存储数据。(相当于是vector<int>表现出了栈的行为)。

    标准库提供了三种顺序容器适配器:queue(FIFO队列)、priority_queue(优先级队列)、stack(栈)。

    要使用适配器,需要加入一下头文件:
    #include <stack>        //stack
    #include<queue>       //queue、priority_queue
    种类 默认顺序容器 可用顺序容器 说明
    stack deque vector、list、deque  
    queue deque list、deque 基础容器必须提供push_front()运算
    priority_queue vector vector、deque 基础容器必须提供随机访问功能

    注意,适配器都有自己默认实现的容器,,当然也可以自己指定。具体如上表。

    适配器通用的操作和类型

    名称 意义
    size_type

    一种类型,足以存储此适配器类型最大对象的长度

    value_type 元素类型
    container_type 基础容器的类型,适配器在此容器类型上实现
    A a; 创建一个新空适配器,命名为 a
    A a(c); 创建一个名为 a 的新适配器,初始化为容器 c 的副本
    关系操作符

    所有适配器都支持全部关系操作符:==、 !=、 <、 <=、 >、>=

    默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现。在创建适配器时,通过将一个顺序容器指定为适配器的第二个类型实参,可覆盖其关联的基础容器类型:

    stack< string, vector<string> > str_stk;
    stack< string, vector<string> > str_stk(svec);

    对于给定的适配器,其关联的容器必须满足一定的约束条件:

    所有的适配器都要求容器具有添加和删除元素的能力,所以不能建立在array之上;也不能建立在forward_list之上,因为,适配器还要求访问尾元素的能力;

    stack适配器所关联的基础容器可以是任何一种顺序容器类型。stack可以建立在vector、list、deque容器之上;

    queue适配器要求其关联的基础容器必须提供push_front运算,因此只能建立在list和deque容器上,而不能建立在vector容器上。

    priority_queue适配器要求提供随机访问功能,因此可建立vector或deque容器上,但不能建立在list容器上。

    栈适配器

    操作 描述
    s.empty() 如果栈为空,返回true,否则返回false
    s.size() 返回栈中元素的个数
    s.pop()  删除栈顶元素,但不返回其值
    s.top() 返回栈顶元素,但不删除其值
    s.push(item) 在栈顶压入新元素


    队列和优先级队列

    操作 描述
    q.empty() 如果对列为空,返回true,否则返回false
    q.size() 返回队列中元素的个数
    q.pop() 删除队列首元素,但不返回其值
    q.front() 返回队列首元素的值,但不删除该元素;该操作适用于queue而非priority_queque
    q.back() 返回队尾元素的值,而不删除该元素;该操作适用于queue而非priority_queque
    q.top() 返回具有最高优先级的元素值,但不删除该元素;该操作适用于priority_queque
    q.push(item) 对于queue,在队尾压入一个新元素;对于priority_queue,在基于优先级的适当位置插入新元素
  • 相关阅读:
    MySQL8.0新增配置参数
    CF1153F Serval and Bonus Problem
    win10 uwp xaml 绑定接口
    win10 uwp xaml 绑定接口
    Windows Community Toolkit 3.0 新功能 在WinForms 和 WPF 使用 UWP 控件
    Windows Community Toolkit 3.0 新功能 在WinForms 和 WPF 使用 UWP 控件
    win10 uwp 渲染原理 DirectComposition 渲染
    dotnet 从入门到放弃的 500 篇文章合集
    C# ValueTuple 原理
    WPF 使用 Direct2D1 画图入门
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/6711265.html
Copyright © 2011-2022 走看看