zoukankan      html  css  js  c++  java
  • 容器适配器

    除了顺序容器外,标准库还定义了三个顺序容器适配器:stackqueuepriority_queue

    适配器是标准库中的一个通用概念,容器、迭代器和函数都有适配器。本质上,一个适配器是一种机制,能使某种事物的行为看起来像另外一种事物。一个容器适配器接受一种已有的容器类型,使其行为看起来像一种不同的类型。

    定义一个适配器

    每个适配器都定义两个构造函数:

    • 默认的构造函数创建一个空的对象。
    • 接受一个容器的构造函数拷贝该容器来初始化适配器。

    默认情况下,stackqueue 是基于 deque 实现的,priority_queue 是在 vector 之上实现的。

    可以在创建一个适配器时将一个命名的顺序容器作为第二个参数来重载默认容器类型。

    //在vector上实现的空栈
    stack<string, vector<string>> str_stk;
    //str_stk2在vector上实现,初始化时保存svec的拷贝
    stack<string, vector<string>> str_stk2(svec);
    
    

    对于一个给定的适配器,可以使用哪些容器是有限制的。

    • 所有容器都要有添加和删除元素的能力,因此,适配器不能构建在 array 之上。类似的,也不能用 forward_list 来构造容器适配器,因为所有适配器都要求容器具有添加、删除以及访问尾元素的能力。
    • stack 只要求 push_backpop_backback 操作,因此可以使用除 arrayforward_list 之外的任何容器类型来构造。
    • queue 要求 backpush_backfrontpush_front,因此它可以构建在 listdeque 之上,但不能基于 vector 构造。
    • priority_queue 除了 frontpush_backpop_back 操作之外还要求随机访问能力,因此可以构造于vectorqueue 之上,但不能基于 list 构造。

    每个容器适配器都基于底层容器类型的操作定义自己的特殊操作,使用时只可以使用适配器操作,而不能使用底层容器类型的操作。

    栈适配器

    stack 类型定义在 stack 头文件中。

    stack<int> intStack;
    for (size_t ix = 0; ix != 10; ++ix)
    intStack.push(ix);
    
    while (!intStack.empty())
    {
        int value = intStack.top();
        intStack.pop();	
    }
    
    

    队列适配器

    queuepriority_queue 适配器定义在 queue 头文件中。

    priority_queue 允许在队列中的元素创立优先级。新加入的元素会安排在所有优先级比它低的已有元素之前。默认情况下,标准库在元素类型上使用 < 运算符来确定相对优先级。

  • 相关阅读:
    Linux基础命令-cp
    Linux基础命令-mkdir
    Linux基础命令-touch
    Linux基础命令-diff
    Linux基础命令-cut
    Linux基础命令-stat
    System.Web.HttpException: 请求在此上下文中不可用
    数据库日志删除、压缩操作
    如何收缩和删除SQL日志文件
    Excel 常用宏代码大全
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/12497252.html
Copyright © 2011-2022 走看看