zoukankan      html  css  js  c++  java
  • (顺序)容器的好伴侣 --- 容器适配器

    前言

      vector容器的数据结构原型是顺序表,它很好的实现了顺序表的功能,大大方便了编程。好了,现在假设有天我又想用栈,那么有没有栈对应的容器呢?很遗憾,木有。但基于“栈”可以由顺序表或者链表实现这一特性,C++提供了stack给我们使用,来解决栈的实现这个问题。stack可不是类,也不是容器,那它是什么呢?它就是本文要讨论的一个新的类型 --- 容器适配器。

    什么是容器适配器?

      容器适配器是对容器的一种再封装。不同的容器适配器提供不同的函数,使容器的功能得到全新的特定的扩展。(但它和容器的容器是有区别的:容器适配器不支持迭代器和算法,使用起来限制比较大)。标准库提供了三种容器适配器:queue,stack和priority_queue。

    容器适配器怎么用?

      一般来说,先定义一个容器,接着给该容器配备相应的容器适配器,然后就可以使用该容器适配器特有的函数处理数据了。这里可以省略掉容器定义那一步,容器适配器将自动分配容器。下面这个代码示范了栈容器适配器stack的用法。我们先定义一个vector容器,接着给该vector容器分配stack容器适配器,然后使用栈容器提供的函数自顶向下的输出所有元素,解决了前言所提出的问题:

     1 #include <iostream>
     2 #include <vector>
     3 // 使用容器适配器必须包含相应的头文件
     4 #include <stack>
     5   
     6 using namespace std;
     7   
     8 int main()
     9 {
    10     vector<int> v;
    11     
    12     /*
    13      * 将0-9存入vector容器并打印
    14     */
    15     for (int i=0; i<10; i++)
    16         v.push_back(i);
    17     cout << "输出Vector容器:" << endl;
    18     for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    19         cout << *it << " ";
    20     cout << endl << endl;
    21 
    22     // 给容器v配上容器适配器
    23     stack< int, vector<int> > s(v);
    24     /*
    25      * 使用栈容器适配器stack提供的函数处理数据
    26     */
    27     cout << "自顶向下输出栈( stack容器适配器 ):" << endl;
    28     while (!s.empty()) {
    29         cout << s.top() << " ";
    30         s.pop();
    31     }
    32     cout << endl;
    33 
    34     return 0;
    35 }

      运行结果:

      

    说明

      1. 容器适配器只适用于一定的容器而不是所有容器。

      2. 容器适配器的函数实现其实也是基于其参数容器的函数,而不是自己重新定义的。

  • 相关阅读:
    全代码实现WordPress分类目录和标签添加新的自定义字段
    基于max-height实现不定高度元素的折叠/合并,展开/收缩的动画效果
    css实现不定宽高的图片img居中裁剪_类似微信朋友圈图片效果
    你知道我们平时在CSS中写的%都是相对于谁吗?
    纯css如何绘制三角形_利用border实现画三角形的原理方法
    wordpress建站不得不知的安全防护(二)
    wordpress建站不得不知的安全防护(一)
    Java连载55-接口的作用、接口举例
    Java连载54-两种单例模式、接口详解
    Python连载54-FTP编程
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3221940.html
Copyright © 2011-2022 走看看