
C++随想录
文章平均质量分 87
五木大大
十年以上编程经验
喜欢和各路朋友一起探讨技术
喜欢交朋友
喜欢思想的碰撞
喜欢分享
展开
-
【设计模式】组合模式的魅力:打造易用且高效的对象组织结构,优雅地处理复杂的对象组合关系,构建可扩展的组件化系统,打造用户友好的界面
组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“部分-整体”的层次结构。通过组合模式,客户端可以以统一的方式处理单个对象和组合对象,从而简化了对复杂对象结构的操作和管理。组合模式的核心思想是将叶节点和组合节点统一对待,使得客户端可以一致地处理它们,从而提高了系统的灵活性和可扩展性。在组合模式中,抽象组件类定义了统一的接口,叶节点类表示单个对象,而组合节点类包含了子对象。组合模式常用于构建树形结构的系统,例如文件系统、菜单系统等。原创 2024-01-30 21:57:16 · 1269 阅读 · 0 评论 -
【设计模式】迭代器模式(迭代子模式):遍历集合无忧,灵活性满满,支持多种遍历方式,应对不同需求,集合遍历神器,轻松应对复杂场景,优雅遍历,提升代码质量
迭代子模式(迭代器模式)是一种行为设计模式,它允许你在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中的所有元素。在迭代子模式中,迭代子(Iterator)是一个对象,它知道如何遍历集合,并且跟踪它当前在集合中的位置。迭代子提供了一种统一的方式来访问集合中的元素,无论集合的具体类型如何。迭代子模式的核心思想是将遍历集合的行为从集合本身中分离出来,这样集合就可以专注于自己的数据结构,而遍历集合的逻辑可以被封装在迭代子中。这种分离使得集合和遍历逻辑可以相互独立地变化,而不会相互影响。原创 2024-01-19 22:38:25 · 1354 阅读 · 0 评论 -
【设计模式】深入理解责任链模式的工作原理,责任链模式的多重应用场景:从权限管理到审批流程,在日志记录系统中的应用,在网络中实现动态请求处理
责任链模式是一种行为设计模式,用于将请求的发送者和接收者解耦。在这种模式中,请求通过一条由多个对象组成的链传递,直到有一个对象能够处理该请求为止。每个对象都可以决定是否处理请求以及是否将请求传递给下一个对象。这种模式非常适合处理多个对象可能会处理同一个请求的情况,或者在运行时确定哪个对象将处理请求。责任链模式可以动态地组织对象之间的关系,从而更灵活地处理请求。在责任链模式中,通常会建立一个抽象处理者(Handler)类,定义一个处理请求的方法,以及一个指向下一个处理者的引用。原创 2024-01-18 20:28:31 · 1333 阅读 · 0 评论 -
【设计模式】深入理解状态模式:如何优雅地管理对象的状态和行为,打造流畅的角色状态管理系统,深入分析上下文、状态和具体状态的作用,从理论到实践的完整指南
状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变其行为。这种模式将对象的状态封装成独立的类,并将状态的改变委托给表示不同状态的对象。状态模式的核心思想是将对象的行为与其状态分离,使得对象可以根据其内部状态的变化而改变其行为,同时避免了使用大量的条件语句来判断对象的状态。然而,状态模式也存在一些缺点,例如可能会导致系统中类的数量增加,因此在实际应用中需要权衡使用。状态模式在实际项目中有着广泛的应用,例如电梯控制系统、游戏角色状态管理、订单状态管理等。原创 2024-01-17 21:52:22 · 955 阅读 · 0 评论 -
【图的算法】深度优先,老鼠走迷宫,找到最短通路,C/C++代码实现
二维矩阵中,1表示“墙壁”与“障碍”、0表示“通路”。假设1只老鼠从起点出发,可向“上、下、左、右、右上、右下、左下、左上”等8个方向行走,一般的迷宫可以表示为一个二维平面模型,将迷宫的左上角作为入口,右下角作为出口,6. 如果每次探索的路径均为从起点到终点的最短路径,则负责程序设计的同学。4.如果有路径则利用二维数组输出路径、如果自动生成的迷宫无路径则系统输。要找到通路的情况下,找最短路径,就是步数最少的通路。3.迷宫可由系统自动生成也可由测试员进行输入;2.程序中需要有文字用户界面和必要的提示;原创 2024-01-16 15:30:35 · 407 阅读 · 0 评论 -
【设计模式】深入理解中介者模式,解耦对象之间的复杂交互,实现用户之间的消息传递,优化飞机之间的航线协调,构建高效的系统交互方式
中介者模式是一种行为型设计模式,其核心思想是通过引入一个中介者对象来封装一组对象之间的交互。这种模式可以降低对象之间的耦合度,使得对象之间的交互更加灵活和可维护。在现实世界中,我们经常会遇到需要协调多个对象之间交互的场景,例如聊天室中的用户之间的消息交互、飞机调度系统中飞机之间的航线调度等。这些场景中,如果对象之间的交互过于复杂,直接的交互方式可能会导致系统难以维护和扩展。而中介者模式的出现正是为了解决这些问题。原创 2024-01-15 23:21:41 · 1176 阅读 · 0 评论 -
【设计模式】命令模式详解,优雅解耦,支持遥控器、菜单操作等,使用C++代码演示
命令模式是一种行为设计模式,它旨在将请求或操作封装成一个对象,从而允许客户端参数化和排队请求,以及支持撤销操作。这种模式的核心思想是将命令的发出者和执行者解耦,使得命令的发出者不需要知道具体的执行细节,只需要知道如何发送命令即可。通过命令模式,可以实现请求的撤销、重做、排队、记录日志等功能,同时也可以减少系统中各个对象之间的耦合度,提高系统的灵活性和可扩展性。在实际应用中,命令模式常常用于实现菜单操作、遥控器控制、文本编辑器的撤销和重做功能、日程安排软件的操作记录等场景。原创 2024-01-11 10:27:49 · 907 阅读 · 0 评论 -
【设计模式】深入理解访问者模式:数据结构与操作分离的利器,感受双重分派的奇妙之处
访问者模式是一种行为型设计模式,它允许你定义一个新的操作,而无需改变元素类。这种模式的核心思想是将数据结构和对数据结构的操作分离开来,从而可以在不改变数据结构的前提下,定义新的操作。访问者模式的关键是双重分派。在访问者模式中,元素类中会定义一个接受访问者的方法,而访问者类中会定义对应于不同元素的操作方法。当一个访问者对象访问一个元素对象时,会根据元素对象的类型和访问者对象的类型,动态地调用对应的操作方法,从而实现了双重分派。通过使用访问者模式,可以很方便地增加新的操作,而不需要修改元素类。原创 2024-01-10 18:47:59 · 888 阅读 · 0 评论 -
【设计模式】备忘录模式的神奇之处:如何轻松备份和恢复对象状态?【C++示例代码】
一、原理及示例备忘录模式是一种行为设计模式,它允许在不暴露对象实现细节的情况下保存和恢复对象的内部状态。这种模式通常用于需要记录和恢复对象状态的情况,例如撤销操作、历史记录等。原创 2024-01-08 15:52:03 · 1146 阅读 · 0 评论 -
【设计模式详解】探秘解释器模式,掌握解释器模式的艺术及其神奇力量【C++代码实现示例】
解释器模式是一种行为型设计模式,它用于定义语言的文法,并且在运行时解释和执行语言中的表达式。该模式通常包含以下几个角色:抽象表达式(Abstract Expression):定义了一个抽象的接口,用于解释和执行特定的语法规则。终结符表达式(Terminal Expression):实现了抽象表达式接口,用于表示语言中的终结符(如变量、常量等)。非终结符表达式(Non-terminal Expression):实现了抽象表达式接口,用于表示语言中的非终结符,通常由多个终结符或非终结符组成。上下文(C原创 2024-01-02 22:59:31 · 1310 阅读 · 0 评论 -
【设计模式】桥接模式详解,如何优雅地处理不同维度的系统变化? 有原理、示例、场景、优缺点及常见面试题和答案
桥接模式是一种设计模式,用于将抽象部分与它的实现部分分离,以便两者可以独立地变化。这种模式涉及一个接口,它充当一个桥,使得具体类可以独立地改变。在桥接模式中,抽象类和实现类可以通过组合关系进行连接,而不是继承关系。这样可以减少类之间的耦合,使得抽象类和实现类可以独立地变化。原创 2023-12-28 16:50:31 · 1049 阅读 · 0 评论 -
【设计模式详解】外观模式:简化复杂系统接口的大门,一键式接入,无忧使用 C++代码详解实现
外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,并为客户端提供了一个更简单的接口,以便于使用子系统。这种模式涉及一个单一的类,该类提供了一个简单的接口,用于与子系统中的一组接口进行交互。总体来说,外观模式可以帮助我们简化复杂系统的接口,降低客户端与子系统之间的耦合度,但在设计时需要注意避免外观类变得过于庞大,以及遵循开闭原则。在外观模式中,有一个外观类,它封装了与客户端交互所需的接口。的操作,并为客户端提供了一个简单的接口。原创 2023-12-26 11:58:44 · 1693 阅读 · 0 评论 -
【设计模式】功能无限,结构不变:探秘装饰器模式的神奇魔力,揭秘装饰器模式的设计精髓
装饰器模式通过创建一个包装器来实现的,也就是说,通过在原始对象周围包裹一个或多个装饰器来增加新的行为或功能。总体来说,装饰器模式是一种灵活而强大的设计模式,适用于需要动态地添加功能或修改对象行为的场景。总的来说,装饰器模式通过组合和包装的方式实现了在运行时动态地为对象添加新的功能,是一种非常灵活和强大的设计模式。这个示例展示了装饰器模式在 C++ 中的应用,通过组合和继承的方式动态地添加功能,实现了对对象的动态装饰。这个结构图清晰地展示了装饰器模式中组件、具体组件、装饰器抽象类和具体装饰器之间的关系。原创 2023-12-18 15:49:09 · 1025 阅读 · 0 评论 -
【设计模式】适配器模式 告别接口难题,让你的代码更兼容,让你的接口不再孤单,解锁接口兼容新境界,让你的代码变得更灵活!
适配器模式是一种结构设计模式,它允许接口不兼容的类能够一起工作。适配器模式通过创建一个包装类来实现这一点,这个包装类包含了需要的接口,并且使用一个已有的类来实现这些接口。在适配器模式中,有两种适配器:类适配器和对象适配器需要使用一个已有的类,但是它的接口与需要的接口不兼容。需要使用多个类,但是它们的接口不兼容。需要重用已有的类,但是它的接口不符合需要的接口。原创 2023-12-15 17:58:04 · 933 阅读 · 0 评论 -
【高级感UP】掌握代理模式,编写优雅而高效的程序,C++实现代理模式揭秘,各种场景的示例代码
代理模式是一种结构型设计模式,它允许你提供一个代理(或者占位符)以控制对其他对象的访问。使用代理模式,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。代理模式的主要目的是控制对对象的访问,而不是直接访问它。这种控制可以是对访问的限制,也可以是对访问的增强。在代理模式中,有三个角色:Subject(主题):定义了 RealSubject 和 Proxy 的共同接口,这样在任何使用 RealSubject 的地方都可以使用 Proxy。原创 2023-12-14 20:18:16 · 1180 阅读 · 0 评论 -
【设计模式】原型模式详解,带你走进C++实现的精彩世界
今天我们来聊一聊创建型模式的一种:原型模式;原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需使代码依赖它们所属的类。这种模式对于创建复杂对象或者那些创建过程中涉及很多成本的对象非常有用。使用场景、优缺点等展开描述。原创 2023-12-14 01:56:28 · 436 阅读 · 0 评论 -
【再谈观察者模式】观察者模式揭秘:打动你的C++ Qt世界!
当我们设置聊天窗口的消息时,观察者会自动更新自身的消息显示。在我们的示例中,聊天窗口就是主题,而其他聊天窗口则是观察者。在我们的示例中,我们创建一个名为 ChatWindow 的类作为主题。的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在我们的示例中,我们创建一个名为 ChatWindowObserver 的类作为观察者。实现了 Observer 接口的 ChatWindowObserver 类将作为聊天窗口的观察者,它将负责更新自身的消息显示。原创 2023-12-13 19:16:33 · 577 阅读 · 0 评论 -
建造者模式详解:原理及示例代码、结构图、使用场景及优缺点
当一个对象的构造过程具有多个步骤,并且不同的构造步骤可以产生不同的表示时,建造者模式是一个很好的选择。分离构建过程和最终表示:建造者模式可以将一个复杂对象的构建过程与其最终表示分离开来,使得构建过程可以灵活地组合,而不会影响最终的产品表示。当需要创建的对象具有复杂的内部结构,但客户端代码只关心最终的产品对象时,建造者模式可以隐藏对象的内部构造细节,使客户端代码更加简洁。容易扩展:由于建造者模式将构建过程解耦,因此可以比较容易地增加新的具体建造者,以及修改已有的具体建造者,而不会对客户端代码产生影响。原创 2023-12-10 21:39:47 · 1025 阅读 · 0 评论 -
工厂模式:简单工厂知多少?原理、示例代码、场景及优缺点?
工厂模式中,另一种用得很多的模式是简单工厂模式,直奔主题。一、简单工厂原理、示例代码简单工厂模式是一种创建型设计模式,它提供了一个统一的接口来实例化一组相关或相似的对象,而无需暴露对象的创建逻辑。在简单工厂模式中,客户端通过向工厂类传递参数来获取所需的对象实例,而无需直接调用对象的构造函数。// 定义一个抽象的产品类public:// 具体产品类Apublic:// 具体产品类Bpublic:// 简单工厂类public:// 根据传入的参数创建相应的产品实例。原创 2023-12-09 16:30:57 · 1401 阅读 · 0 评论 -
适配器模式详解:原理、C++代码实现、结构图、场景及优缺点
适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。这可以让原本由于接口不兼容而不能在一起工作的类能够协同工作。适配器模式通常包括三个角色:目标接口(Target)、适配器(Adapter)和被适配者(Adaptee)。在上面的示例中,Target是目标接口,Adaptee是被适配者,Adapter是适配器。适配器Adapter实现了目标接口Target,并持有一个被适配者Adaptee的实例。原创 2023-12-07 23:09:49 · 1318 阅读 · 0 评论 -
观察者模式详解:原理、步骤、结构图、代码实现、场景及优缺点
观察者模式是一种行为设计模式,它允许对象定义一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并自动更新。这种模式也被称为发布-订阅模式。原创 2023-12-06 12:18:02 · 2982 阅读 · 0 评论 -
工厂模式:抽象工厂模式 C++代码实现、场景及优缺点
抽象工厂模式是一种创建型模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而无需指定它们的具体类。在这个流程图中,Client类通过接口创建和对象。接口定义了创建产品的方法,而具体的工厂类实现了这些方法。每个具体的工厂类可以创建一系列相关的产品,比如和,或者和。这个流程图展示了抽象工厂模式的基本结构,通过抽象工厂和抽象产品的定义,可以方便地扩展新的产品系列,并且客户端代码可以方便地切换不同的产品系列。原创 2023-12-06 09:48:33 · 1601 阅读 · 0 评论 -
工厂模式C++示例代码:简单工厂模式、工厂方法模式和抽象工厂模式
当谈到工厂模式时,通常会涉及到三种常见的工厂模式:简单工厂模式、工厂方法模式和抽象工厂模式。下面我们将依次展开这三种工厂模式,并给出用C++实现的示例代码。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。原创 2023-12-05 23:59:11 · 1143 阅读 · 0 评论 -
设计模式:C++如何实现一个高质量的单例模式,双重校验锁 懒汉多线程安全 ,还得考虑防止编译器优化、异常死锁
关键字volatile的神奇之处:由于在多线程new对象的过程中,有可能会在初始化过程中,产生了地址,但是其他线程从寄存器拿到地址去操作去了,为了防止其他线程没有从原始内存中拿数据,加上一个volatile关键字来修饰这个指针,可以起到很好的效果;性能问题:加上互斥锁之后,每次都要上锁和解锁的话,还是比较费时间的,为了提升性能,可以对指针先判空处理,不为空了,直接返回对象指针了,不需要再去上锁解锁了,大大节约了时间,提升性能;这种实现方式,在饿汉单例里面,不需要考虑太多,直接返回对象指针即可;原创 2023-11-25 10:39:42 · 2142 阅读 · 1 评论 -
【C++实现】无重复字符的最长子串
请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串。给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。输入: s = "abcabcbb"输入: s = "pwwkew"输入: s = "bbbbb"原创 2023-11-16 22:26:59 · 761 阅读 · 0 评论 -
聊一聊程序员的护城河,就好比股市里面公司护城河,程序员也需要强大的护城河,最重要的是第五种能力:茂盛的头发
谈到这个话题,估计很多人就会想,程序员的护城河,这个有点难啊,因为当下AI的大模型时代已经到来,但凡初级程序员能干的事情,AI大模型都能干,而且干得还好,还快;AI模型虽然很强大,但是你会发现,它唯一的不足就是还没办法创新,或者还达不到完全取代程序员的效果。先聊聊AI能干啥?但凡需要大量记忆的东西,AI绝对是手到擒来呀,AI能把人类有记录以来的所有数据都给你记住,这点是我们人类不够擅长的地方,但也是人类最擅长的地方,人类学会了忘记,所以很快乐。那聊到这,程序员真正能起到护城河的能力都有哪些呢?原创 2023-11-14 10:44:03 · 175 阅读 · 1 评论 -
<三>、代码优化:C++实现多线程的同步处理:控制ABC的输出顺序,输出10组,mutex+condition_variable
需求:有三条线程,可以分别输出A、B、C字符,现想办法控制输出顺序,使得顺序为ABCABC......ABC[共10组],并且每条线程只能启动一次,不能多次启动。原创 2023-11-13 18:24:40 · 124 阅读 · 0 评论 -
<二>、C++实现多线程的同步处理:控制ABC的输出顺序,输出10组,mutex+condition_variable
需要3条线程输出不同的字符,分别为A、B、C,并且顺序要固定住:ABCABC...ABC[共10组],这样的情况下,只需要有一个计数器来统计字符的输出数量,通过这个计数器来对3取余,通过余数来当条件控制输出顺序即可。这个使用条件变量的方式,跟标志位有异曲同工之妙,并且不用来回变来变去的,只需要计数器不停递增即可。和之前没啥区别,不过效果更好控制,逻辑更简单易控。接着上一篇,本篇实现更复杂一些的条件变量的处理。原创 2023-11-13 16:22:53 · 205 阅读 · 0 评论 -
<一>、C++实现多线程的同步处理:控制ABC的输出顺序,输出10组,mutex+condition_variable
通过一个标志位来处理的方式虽然可以实现效果,但是还不够安全,极有可能有多条线程同时操作一个全局变量,导致资源争夺问题,为了保证安全,可以在此基础上加上对应的锁来处理同步问题,比如加上互斥锁 mutex,就可以有效的防止资源争夺问题。要在标准C++中使用多线程,可以使用类 thread,3条线程,我们可以直白一些,直接实现3个线程函数,在函数里面进行循环输出对应字符,每个循环控制10次即可;同时,要想控制输出顺序的话,最开始想到的方式是直接加一个标志位来控制,也是极好的,也基本上能实现ABC的输出效果;原创 2023-11-13 15:55:15 · 566 阅读 · 0 评论