当前位置: 首页 > news >正文

C++STL(四):stack和queue的模拟实现

C++STL(四):stack和queue的模拟实现

容器适配器

什么是容器适配器

  • 适配器是一种设计模式(设计模式是一套被反复使用的,多数人知晓的,经过分类编目的,代码设计经验的总结),该种模式将一个类的接口转换成用户需要的另外一个接口。

容器适配器:以某种已有的既定容器作为底层结构,在其基础上进一步地进行封装接口函数,使其可以满足某种特性
在这里插入图片描述

STL六大组件中配接器中的stack,queue,priority_queue就是通过封装其他容器实现的

在这里插入图片描述

stack的模拟实现

成员函数函数作用实现方法
push元素入栈调用所指定容器的push_back
pop元素出栈调用所指定容器的pop_back
top获取栈顶元素调用所指定容器的back
size获取栈中有效元素个数调用所指定容器的size
empty判断栈是否为空调用所指定容器的empty
swap交换两个栈中的数据调用所指定容器的swap
#pragma once
#include<iostream>
#include<list>
#include<vector>
#include<deque>

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

            private:
            Container _con;
        };
}

stack的模拟实现

成员函数函数作用实现方法
push队尾入队列调用所指定容器的push_back
pop队尾出队列调用所指定容器的pop_back
front获取队头元素调用所指定容器的front
top获取队尾元素调用所指定容器的back
size获取栈中有效元素个数调用所指定容器的size
empty判断队列是否为空调用所指定容器的empty
swap交换两个队列的数据调用所指定容器的swap
#pragma once
#include<list>
#include<vector>
#include<deque>

namespace bit
{
    template<class T, class Container = deque<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;
        };
}

相关文章:

  • [python] 使用Python实现Markdown文档格式转换
  • Flutter 输入组件 Radio 详解
  • 2018扬州大学876农业机械学概论填空名词解释简答
  • 文件I/O--C++的文件操作
  • 风电资源评估的关键指标及其应用
  • Log4j2 的核心实现和源码分析
  • 电源滤波器在医用电气设备中的应用
  • HTML5 canvas圆形泡泡动画背景特效
  • 【Arm+Qt+Opencv】基于人脸识别考勤系统实战
  • Android系统深度定制:内置Google TTS语音引擎并设为默认的终极指南
  • 【Git】基础使用
  • 国际机构Gartner发布2025年网络安全趋势
  • GaussDB数据库表设计与性能优化实践
  • [特殊字符] C++ 常见 Socket 错误与优化指南
  • [深度学习]特征提取和无监督
  • 如何让机器像人类一样感知声调颤抖与嘴角抽动的同步情感表达?
  • 如何确保异步任务在 HTTP 返回后继续执行?context.WithoutCancel
  • 常见框架漏洞之五:中间件
  • 操作系统必知的面试题
  • 【STM32】初识STM32
  • 外交部:正确认识和对待历史是检验日本能否恪守和平发展承诺的重要标准
  • 韩国总统选战打响:7人角逐李在明领跑,执政党临阵换将陷入分裂
  • 普京提议恢复直接谈判,泽连斯基:望俄明日停火,乌愿谈判
  • 观察|天空之外的战场:官方叙事、新闻与社交平台中的印巴冲突
  • 巴总理召开国家指挥当局紧急会议
  • 中国金茂新任命三名副总裁,撤销区域公司