stack和queue简单实现(容器适配器)

简介: stack介绍

stack介绍

7776cf3c1cec4d999e54000c249e2a6a.png

stack模拟实现

以前我们实现stack,需要像list,vector一样手动创建成员函数,成员变量。但是stack作为容器适配器,我们有更简单的方法来实现它。

可以利用模板的强大之处!

namespace xty
{
  template<class T, class Container = deque<T>>
  //template<class T, class Container = vector<T>>
  class stack
  {
  public:
    void push(const T& x)
    {
      _con.push_back(x);
    }
    void pop()
    {
      _con.pop_back();
    }
    const T& top()
    {
      return _con.back();
    }
    bool empty()
    {
      return _con.empty();
    }
    size_t size()
    {
      return _con.size();
    }
  private:
    Container _con;
  };
}

该段代码使用了vector当作了默认的模板容器,这样可以使我们的代码量和复杂度大大减少。

queue 介绍

504e8e2691ac43c8822357409aaeed24.png

queue模拟实现

queue也是一个容器适配器,因此我们使用现有的容器当作模板,即可简便的实现queue功能。

  template<class T, class Container = deque<T>>
  //template<class T, class Container = list<T>>
  class queue
  {
  public:
    void push(const T& x)
    {
      _con.push_back(x);
    }
    void pop()
    {
      _con.pop_front();
    }
    const T& front()
    {
      return _con.front();
    }
    const T& back()
    {
      return _con.back();
    }
    bool empty()
    {
      return _con.empty();
    }
    size_t size()
    {
      return _con.size();
    }
  private:
    Container _con;
  };

只需修改少量代码即可完成复现。

deque

观察stack和queue的容器模板后,发现其实是deque,那这个容器是什么样的呢?

61eebd99b4f7404bab01179a7a13c2e3.png

从官方库中可以发现,它既有vector的随机访问的优点,也有list插入删除的优点。但是都并没有将二者效率发挥到极致,是一个折中的容器。

具体图例如下:

1fd4c996cd9d4285a7708758122099e7.png

缺点:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构。

目录
相关文章
|
22天前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
31 0
|
2月前
|
设计模式 存储 C++
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现(二)
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现
|
2月前
|
存储 C++ 容器
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现(一)
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现
|
6月前
|
C++ 容器
C++之Queue容器
C++之Queue容器
|
6月前
|
C++ 容器
C++之stack容器
C++之stack容器
|
5月前
|
存储 算法 C语言
【C++】详解STL的适配器容器之一:优先级队列 priority_queue
【C++】详解STL的适配器容器之一:优先级队列 priority_queue
|
5月前
|
设计模式 存储 缓存
【C++】详解STL容器之一的deque和适配器stack,queue
【C++】详解STL容器之一的deque和适配器stack,queue
|
6月前
|
存储 设计模式 算法
【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?
【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?
56 0
|
8天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
130 77
|
16天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序