【C++】了解设计模式、 stack&queue的使用与模拟实现(上)

简介: 【C++】了解设计模式、 stack&queue的使用与模拟实现(上)

1.设计模式


设计模式(design pattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。


总之,设计模式就是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案


设计模式一共有23种,目前我们接触到的设计模式主要就是迭代器模式(Iterator Pattern)。


迭代器模式:迭代器封装之后,提供一种方法顺序访问一个聚合对象中各个元素,不暴露底层细节


那么从本文开始,我们要接触到一个新的设计模式——适配器模式(Adapter Pattern)


适配器模式:适配器实际上是一种转换,将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作


2.stack


1.stack的使用

1.stack的结构

c7ed947ee8d1a5a8a7ce681a1455af39.png

0178fc2765e2eed29bdba462fe863f3a.png

可以看到模板参数和我们之前看到的list,vector不同,stack的第二个模板参数是一个容器,在下面的介绍中也能看到,stack是一种容器适配器。本质上就是为这种容器提供一类特定的接口

2.stack的接口

a33f92fb5de10f4c1d7bcf4682f5626c.png

可以看到,stack的接口比容器的接口少了很多。这些接口使用起来很容易,所以这里就不做示范了。如果需要查看接口的详细信息,这里还是推荐cplusplus.com

接口 说明
stack 构造一个空栈
empty 判断栈是否为空,返回bool类型
size 返回栈中元素个数,size_t类型
top 返回栈顶元素
push 压栈
pop 出栈


2.stack的模拟实现

1.stack的结构

在上文中我们看到stack类模板的模板参数有两个,第一个是存放元素类型,第二个是容器类型,这里容器类型我们与库里面的实现保持统一,默认容器是deque,后文将会介绍deque这个容器

stack这个类中,由于使用了容器,所以在成员变量中,只需要一个容器对象用于存放数据即可,所以结构如下

namespace zht//这里把实现的stack包在命名空间中
{
  template<class T, class Container = std::deque<T>>
  class stack
  {
  public:
    //成员函数
  private:
    Container _con;
  };
}


2.接口实现

按照上述接口的介绍,我们实现一下上述的重点接口。由于stack是使用了其他容器的,所以我们直接调用该容器的接口即可

//构造函数:我们不显示写,编译器生成。直接调用_con的默认构造
bool empty() const
{
    return _con.empty();
}
size_t size() const
{
    return _con.size();
}
const T& top() 
{
    return _con.back();//适配这类操作的容器都是支持back或者front接口的,直接调用即可
}
void push(const T& val)
{
    _con.push_back(val);
}
void pop()
{
    _con.pop_back();
}


3.queue


1.queue的使用

1.queue的结构

8536d57cb1977745eb3705e643cf198b.png

与stack相同,queue也是一个容器适配器,但是和stack的规则不相同,stack是后进先出:LIFO,queue是先进先出:FIFO

3.queue的接口

6d1dffdd8ac41b7c8b8c004f18d53b7a.png

和stack很相似的接口,就不一一解释了,如果有需要,可以去cplusplus.com查看详细文档.

相关文章
|
10月前
|
设计模式 C++ 容器
c++中的Stack与Queue
c++中的Stack与Queue
|
11月前
|
C++ 容器
【c++丨STL】stack和queue的使用及模拟实现
本文介绍了STL中的两个重要容器适配器:栈(stack)和队列(queue)。容器适配器是在已有容器基础上添加新特性或功能的结构,如栈基于顺序表或链表限制操作实现。文章详细讲解了stack和queue的主要成员函数(empty、size、top/front/back、push/pop、swap),并提供了使用示例和模拟实现代码。通过这些内容,读者可以更好地理解这两种数据结构的工作原理及其实现方法。最后,作者鼓励读者点赞支持。 总结:本文深入浅出地讲解了STL中stack和queue的使用方法及其模拟实现,帮助读者掌握这两种容器适配器的特性和应用场景。
282 21
|
存储 算法 调度
【C++打怪之路Lv11】-- stack、queue和优先级队列
【C++打怪之路Lv11】-- stack、queue和优先级队列
182 1
|
设计模式 存储 C++
C++之stack 和 queue(下)
C++之stack 和 queue(下)
222 1
|
C++ 容器
C++之stack 和 queue(上)
C++之stack 和 queue(上)
284 0
|
存储 C++ 容器
C++番外篇——stack、queue的实现及deque的介绍
C++番外篇——stack、queue的实现及deque的介绍
155 0
|
存储 算法 C++
C++入门10——stack与queue的使用
C++入门10——stack与queue的使用
152 0
|
10月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
6月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
172 0
|
6月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
262 0