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

【c++】【STL】stack详解

目录

  • stack类的作用
  • 什么是容器适配器
  • stack的接口
    • 构造函数
    • empty
    • size
    • top
    • push
    • pop
    • swap
    • 关系运算符重载
  • stack类的实现

stack类的作用

stack是stl库提供的一种容器适配器,也就是我们数据结构中学到的栈,是非常常用的数据结构,特点是遵循LIFO(last in first out,也就是后进先出)原则。

什么是容器适配器

stl中提供的类很多都叫容器,但有一些叫做容器适配器,容器适配器到底是啥呢?我们不妨先抛掉容器这两个字,先来谈谈适配器,适配器是软件设计之中的一种概念,即基于原有的接口设计适配出用户想要的接口,是一种设计模式,适配器这种设计模式提升了代码复用性以及系统扩展性,降低了代码的耦合度,是一种优秀的设计模式。那么对于容器适配器来说,就是利用已有的容器进行各种操作封装出新的类,这就叫容器适配器。

stack的接口

构造函数

explicit stack (const container_type& ctnr = container_type());

一般来说不用给参数,直接调用默认构造就行。

empty

bool empty() const;

栈的判空。

size

size_type size() const;

返回栈的元素数。

top

      value_type& top();
const value_type& top() const;

返回栈顶元素。

push

void push (const value_type& val);

入栈。

pop

void pop();

出栈。

swap


void swap (stack& x) noexcept(/*see below*/);

栈自己的交换函数。

关系运算符重载

template <class T, class Container>bool operator== (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator!= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator<  (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator<= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator>  (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator>= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);

stack类的实现

#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<deque>using namespace std;namespace jiunian
{template<class T, class container = deque<T>>class stack{public:typedef stack<T, container> Self;//stack()//{//}//stack(Self& x)://	con(x.con)//{//}//~stack()//{//}bool empty()const{return con.empty();}size_t size()const{return con.size();}T& top(){return con.back();}const T& top() const{return con.back();}void push(const T& val){con.push_back(val);}void pop(){con.pop_back();}void swap(Self& x){con.swap(x.con);}Self operator=(Self x){con = x.con;return *this;}private:container con;};
}

stack作为一个容器适配器,实现起来相比其他容器明显简单了不少,因为其作为容器适配器只需要对其他容器的接口进行封装就行,不需要自己造轮子。实现过程一看就懂,不做过多赘述。

相关文章:

  • 游戏引擎学习第253天:重新启用更多调试界面
  • 高并发场景下的MySQL生存指南
  • MERGE存储引擎(介绍,操作),FEDERATED存储引擎(介绍,操作),不同存储引擎的特性图
  • Qt进阶开发:QSS常用的语法介绍和使用
  • 猜数字游戏:从数学原理到交互体验的完整设计指南
  • [更新完毕]2025五一杯A题五一杯数学建模思路代码文章教学:支路车流量推测问题
  • RuoYi-Vue+WuJie整合傻瓜式教程-解决keepAlive问题
  • 2025五一杯数学建模A题:支路车流量推测问题,思路分析+模型代码
  • 【FreeRTOS-列表和列表项】
  • 机器学习Day15 LightGBM算法
  • 基于机器学习的舆情分析算法研究
  • python如何word转pdf
  • 机器学习实战,天猫双十一销量与中国人寿保费预测,使用多项式回归,梯度下降,EDA数据探索,弹性网络等技术
  • PostgreSQL 数据库下载和安装
  • Ubuntu 安装 Cursor
  • 设计模式简述(十五)观察者模式
  • 【Redis分布式】主从复制
  • 【网络服务器】——回声服务器(echo)
  • Linux 环境下 Mysql 5.7 数据定期备份
  • PCA主成分分析法(最大投影方差,最小重构距离,SVD角度)
  • 特朗普宣布提名迈克·沃尔兹为下一任美国驻联合国大使
  • 三大上市猪企:前瞻应对饲料原材料价格波动
  • 体坛联播|欧冠巴萨3比3战平国米,柯洁未进入国家集训队
  • “五一”逃离城市计划:带上帐篷去大自然里充电
  • “铁血防守”制造8年最快丢球,恐惧中的阿森纳什么也做不了
  • “人工智能是年轻的事业,也是年轻人的事业”,沪上高校师生畅谈感想