• 7.8 C++容器适配器


    参考:http://www.weixueyuan.net/view/6405.html

    总结:  

      容器适配器是用基本容器实现的一些新容器,这些容器可以用于描述更高级的数据结构。

      容器适配器有三种:stack、queue和priority_queue。  

      stack可以与数据结构中的栈对应,它具有先进后出的特性,

      而queue则可以理解为队列,它具有先进先出的特性,

      priority_queue则是带优先级的队列,其元素可以按照某种优先级顺序进行删除。

      对于stack,push为入栈操作即向栈中添加元素,pop为出栈操作即删除栈顶元素,top函数则为返回栈顶元素但是并不删除它,empty函数则用于判断栈是否为空,若为空则返回true,否则返回false。

      默认情况下stack容器衍生自deque,如果我们想从vector衍生出stack容器则需要按照如下方式进行定义:stack < int, vector < int > > s;

      对于queue容器而言,它同样默认是衍生自deque容器的。

      priority_queue容器提供了top函数用于访问下一个元素,访问但不删除。对于整型的优先队列而言,默认是按照数据从大到小的顺序删除元素的。

    ---------------------------------

    容器适配器是用基本容器实现的一些新容器,这些容器可以用于描述更高级的数据结构。容器适配器有三种:stack、queue和priority_queue。stack可以与数据结构中的栈对应,它具有先进后出的特性,而queue则可以理解为队列,它具有先进先出的特性,priority_queue则是带优先级的队列,其元素可以按照某种优先级顺序进行删除。

    例1:

    #include <iostream>
    #include <stack>
    using namespace std;
    
    int main()
    {
        stack< int > s;
        int a;
        while(cin >> a)
        {
            s.push(a);
        }
        while( !s.empty() )
        {
            a = s.top();
            s.pop();
            cout<< a <<endl;
        }
        return 0;
    }

    本例是一个stack的示例程序,我们在主函数中定义了一个stack容器实体s,之后我们定义了一个变量a,我们用一个while循环向容器s中添加数据。之后再利用一个while循环将元素都出栈并打印显示。对于stack,push为入栈操作即向栈中添加元素,pop为出栈操作即删除栈顶元素,top函数则为返回栈顶元素但是并不删除它,empty函数则用于判断栈是否为空,若为空则返回true,否则返回false。


    默认情况下stack容器衍生自deque,当我们定义一个stack容器实例时:

    stack < int > s;

    它其实等价于:

    stack < int, deque < int > > s;

    如果我们想从vector衍生出stack容器则需要按照如下方式进行定义:

    stack < int, vector < int > > s;

    例2:

    #include <iostream>
    #include <queue>
    using namespace std;
    
    int main()
    {
        queue < int > q;
        int a;
        while(cin >> a)
        {
            q.push(a);
        }
        while( !q.empty() )
        {
            a = q.front();
            q.pop();
            cout<< a <<endl;
        }   
        return 0;
    }

    本例是queue容器的一个示例程序,对于queue容器而言,它同样默认是衍生自deque容器的。与stack容器相同,queue同样有push、pop函数用于插入和删除元素,只不过不同的是stack只能操作栈顶,而queue是在队列尾部插入元素,在队列头部删除元素。stack容器用top函数访问栈顶元素,而queue没有栈顶这么一说,因而也就没有top函数了,我们想访问队列头的元素可以使用front函数,该函数只是访问并不删除元素。empty函数同样可以用于判断队列queue是否为空。


    例3:

    #include <iostream>
    #include <queue>
    using namespace std;
    
    int main()
    {
        priority_queue < int > p;
    
        int a;
        while(cin >> a)
        {
            p.push(a);
        }
        while( !p.empty() )
        {
            a = p.top();
            p.pop();
            cout << a <<" ";
        }   
        cout << endl;
        return 0;
    }

    本例是priority_queue容器的示例程序,使用priority_queue容器我们只需要包含头文件queue就可以了。同样priority_queue容器可以用push和pop函数来插入和删除元素,priority_queue容器提供了top函数用于访问下一个元素,访问但不删除。对于整型的优先队列而言,默认是按照数据从大到小的顺序删除元素的。程序运行情况如下:

    1 89 23 43 54 32 65 0 8 18 67 +↙
    89 67 65 54 43 32 23 18 8 1 0

  • 相关阅读:
    【bzoj5180】[Baltic2016]Cities 斯坦纳树
    【BZOJ1859】【ZJOI2006】碗的叠放
    【bzoj4589】Hard Nim FWT+快速幂
    【BZOJ1502】【NOI2005】月下柠檬树 simpson 积分
    【loj6437】 【PKUSC2018】 PKUSC 计算几何
    【PKUSC2018】【loj6433】最大前缀和 状压dp
    【pkuwc2018】 【loj2537】 Minmax DP+线段树合并
    多项式求逆元详解+模板 【洛谷P4238】多项式求逆
    【bzoj3684】 大朋友和多叉树 生成函数+多项式快速幂+拉格朗日反演
    【codeforces 623E】dp+FFT+快速幂
  • 原文地址:https://www.cnblogs.com/yongpan/p/7966865.html
Copyright © 2020-2023  润新知