美文网首页
(十三)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

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