美文网首页
(十三)C++篇-容器适配器queue、 priority_qu

(十三)C++篇-容器适配器queue、 priority_qu

作者: GoodTekken | 来源:发表于2022-06-21 09:58 被阅读0次

除了顺序容器,标准库还提供了三种顺序容器适配器:queue、priority_queue 和 stack。 适配器(adaptor) 是标准库中通用的概念,包括容器适配器、迭代器适配器和函数适配器。本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。 容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。例如,stack(栈)适配器可使任何一种顺序容器以栈的方式工作。下表列出了所有容器适配器通用的操作和类型。

操作 类型
size_type 一种类型,足以存储此适配器类型最大对象的长度
value_type 元素类型
container_type 基础容器的类型,适配器在此容器类型上实现
A a; 创建一个新空适配器,命名为 a
A a(c); 创建一个名为 a 的新适配器,初始化为容器 c 的副本
关系操作符 所有适配器都支持全部关系操作符:==、 !=、 <、 <=、 >、>=

使用适配器时,必须包含相关的头文件:
#include <stack> // stack adaptor
#include <queue> // both queue and priority_queue adaptors

栈容器适配器支持的操作

函数 定义
s.empty() 如果栈为空,则返回 true,否则返回 stack
s.size() 返回栈中元素的个数
s.pop() 删除栈顶元素的值,但不返回其值
s.top() 返回栈顶元素的值,但不删除该元素
s.push(item) 在栈顶压入新元素

队列和优先级队列支持的操作

函数 定义
q.empty() 如果队列为空,则返回 true,否则返回 false
q.size() 返回队列中元素的个数
q.pop() 删除队首元素,但不返回其值
q.front() 返回队首元素的值,但不删除该元素 (该操作只适用于队列)
q.back() 返回队尾元素的值,但不删除该元素 (该操作只适用于队列)
q.top() 返回具有最高优先级的元素值,但不删除该元素(该操作只适用于优先级队列)
q.push(item) 对于 queue,在队尾压入一个新元素,对于 priority_quue,在基于优先级的适当位置插入新元素

测试代码如下:

#include <iostream>
#include <string>
#include <stack>
//#include <queue>
using namespace std;
int main()
{
    // number of elements we'll put in our stack
    const stack<int>::size_type stk_size = 10;
    stack<int> intStack; // empty stack
    // fill up the stack
    int ix = 0;
    while (intStack.size() != stk_size)
    {
        // use postfix increment; want to push old value onto intStack
        intStack.push(ix++); // intStack holds 0...9 inclusive
    }
    
    int error_cnt = 0;
    // look at each value and pop it off the stack
    while (intStack.empty() == false) 
    {
        int value = intStack.top();
        // read the top element of the stack
        if (value != --ix) 
        {
            cerr << "oops! expected " << ix << " received " << value << endl;
            ++error_cnt; 
        }
        intStack.pop(); // pop the top element, and repeat
    }
    cout << "Our program ran with "<< error_cnt << " errors!" << endl;
    return 0;
}

输出结果:

tekken@tekken:~/C++WS$ ./a.out 
Our program ran with 0 errors!

相关文章

  • (十三)C++篇-容器适配器queue、 priority_qu

    除了顺序容器,标准库还提供了三种顺序容器适配器:queue、priority_queue 和 stack。 适配器...

  • 014 容器适配器

    除了顺序容器外,标准库还定义了三个顺序容器适配器:stack、queue 和 priority_queue。适配器...

  • 9.7 容器适配器--C++ Primer ReadNote

    9.7 容器适配器 顺序容器适配器主要分三类: 思考:有没有关系容器适配器? 思考:queue默认基础容器是deq...

  • C++ - STL中的queue

    queue queue模板类的定义在 头文件中。queue是容器适配器的一种,用于执行FIFO(first-in ...

  • STL

    三种基本容器: vector, deque(双端队列),list. 基本容器扩展的适配器: queue,stack...

  • C++boolan part3_week1

    C++容器的介绍及使用 C++中的容器大致可以分为两个大类:顺序容器和关联容器。顺序容器中有包含有顺序容器适配器。...

  • C++常用容器

    C++ 有两类常用容器,分别是顺序容器和关联容器,顺序容器例如vector,list,queue,关联容器例如ma...

  • STLRecipe---priority_queue

    priority_queue容器适配器定义了一个元素有序排列的队列,默认队列头部的元素优先级最高。 priorit...

  • C++ 学习笔记之——STL 库 queue

    1. 队列 queue 队列是一种容器适配器,专门用来满足先进先出的操作,也就是元素在容器的一端插入并从另一端提取...

  • PAT一些知识点代码块总结

    PAT总结 PAT中常用的STL容器 顺序容器 vector queue priority_queue stack...

网友评论

      本文标题:(十三)C++篇-容器适配器queue、 priority_qu

      本文链接:https://www.haomeiwen.com/subject/pgvsvrtx.html