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的底层数据结构。

目录
相关文章
|
19小时前
|
设计模式 存储 Android开发
c++的学习之路:18、容器适配器与反向迭代器
c++的学习之路:18、容器适配器与反向迭代器
21 0
|
19小时前
|
存储 设计模式 算法
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
14 1
|
19小时前
|
C++ 容器
约瑟夫经典问题C++,STL容器queue解法
约瑟夫经典问题C++,STL容器queue解法
14 0
|
19小时前
|
容器
|
19小时前
|
容器
|
19小时前
|
存储 算法 C++
【C++】容器篇(四)—— queue的基本介绍以及模拟实现
【C++】容器篇(四)—— queue的基本介绍以及模拟实现
【C++】容器篇(四)—— queue的基本介绍以及模拟实现
|
19小时前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
19小时前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第14天】 在现代微服务架构中,Docker容器作为应用部署的基本单元,其运行状态的监控对于保障系统稳定性和性能至关重要。本文将探讨如何构建一个高效且稳定的Docker容器监控体系,涵盖监控工具的选择、关键指标的采集、数据可视化以及告警机制的设计。通过对Prometheus和Grafana的整合使用,实现对容器资源利用率、网络IO以及应用健康状态的全方位监控,确保系统的高可用性和故障快速响应。
|
19小时前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第13天】在微服务架构和容器化部署日益普及的背景下,对Docker容器的监控变得尤为重要。本文将探讨一种构建高效稳定Docker容器监控体系的方法,通过集成Prometheus和cAdvisor工具,实现对容器资源使用情况、性能指标和运行状态的实时监控。同时,结合Grafana进行数据可视化,为运维人员提供直观的分析界面,以便及时发现和解决潜在问题,保障系统的高可用性和稳定性。
18 6
|
19小时前
|
存储 安全 开发者
如何删除 Docker 镜像、容器和卷?
【5月更文挑战第11天】
13 2
如何删除 Docker 镜像、容器和卷?

热门文章

最新文章