4 三公子Tjq

尚未进行身份认证

我要认证

三少爷的剑:剑气纵横三万里,一剑光寒十九洲!

等级
TA的排名 2k+

C++设计模式——工厂方法(factory method)

一、原理讲解工厂方法是简单工厂的改进,改进之处是每款产品对应一个工厂,该工厂只生产这一种产品,也就是只创建这个产品类对象。1.1意图定义一个创建对象的接口,让子类决定实例化哪个类。该模式使类对象的创建延迟到子类。1.2应用场景客户端不知道他所需要的对象的类; 需要将类的实例延迟到子类中实现,并且一类产品有许多形态。’1.3结构图(UML图)(后面补充)1.4代码实现步骤a1 定义一个抽象产品接口类IProduct,并且定义一个接口函数show()用于子类继承;(抽象.

2020-08-05 22:58:07

C++设计模式——简单工厂(simple factory)

一、原理讲解1.1意图将工厂内部逻辑简化,使用一个工厂在内部用if或者switch创建不同产品对象。1.2应用场景工厂类负责创建的产品对象比较少,不会造成工厂方法中内部逻辑复杂; 客户端只需要传入工厂类的参数,对对象如何创建不感兴趣;1.3结构图(UML图)(后面补充)1.4代码实现步骤a1 定义一个抽象产品接口类IProduct,并且定义一个接口函数show()用于子类继承;(抽象产品类)a2 定义两个实现接口类IProductA和IProductB,都重写接口函数sh

2020-08-05 22:30:20

C++设计模式目录和总结

从封装变化角度对模式分类,如下:1.组件协作:(解决协作问题;)模板方法(template method) 策略模式(strategy) 观察者(observer/event)2.单一职责:(解决类与类责任划分问题)装饰器(decorator) 桥模式(bridge)3.“对象”创建型模式:(对象对象过程中依赖的问题)工厂方法(factory method) 抽象工厂(abstract factory) 原型模式(prototype) 构建器(builder)4.对象性能:

2020-06-27 12:34:40

C++设计模式——桥接模式(bridge pattern)

一、原理讲解1.1意图将抽象部分和实现部分分离,使它们可以独立的变化。(别名:handle/body)1.2应用场景当你不希望抽象和它的实现部分有一种紧密耦合关系,希望在运行时可以切换不同的实现; 类的抽象和实现都可以通过继承子类的方法进行扩充,这时可以选着桥接模式,运用组合方式分别对抽象和实现进行扩充; 当你像完全对客户隐藏抽象时,可以使用桥接模式;(继承时,抽象是可见的) 当你像抽象有多个扩展,实现也有多个方向扩展时使用。’1.3结构图(UML图)桥接模式UML图1.4

2020-06-20 21:35:45

C++设计模式——装饰模式(decorator pattern)

一、原理讲解图1 装饰者模式UML图1.1意图装饰模式目的是:动态地给一个对象添加一些额外的职责,比生成之类更灵活。1.2常用场景一般用于给某个对象添加某个功能,但是又不希望更改该对象底层抽象借口,同时该功能可以动态增删,这时可以考虑用装饰者模式。1.3实行方法如图1所示,装饰着Decorator通过继承抽象基类Component,又组合一个Component指针*component,通过重写从Component继承而来的虚函数operation(),在里面用指针调用oper.

2020-06-07 00:25:49

C++设计模式——观察者模式(observer pattern)

一、原理讲解1.1意图定义一种“一对多”的关系。当一个对象(被观察者/发布者)的状态发生改变时,所有依赖它的对象都将得到通知并更新。又有别名为发布-订阅(publish-subscribe)。1.2应用场景一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中,以使它们可以独立的改变和复用 当一个对象改变,连带其它对象也跟着改变,但是不需要知道具体改变对象...

2020-03-22 23:58:53

C++设计模式——策略模式(strategy pattern)

一、原理讲解1.1意图定义算法簇,将这些算法封装起来,之间可以相互替换。这样的好处在于,使得算法可以独立于使用它的客户而变化。1.2与模板方法区别模板方法主要是继承接口类,而策略模式主要是组合接口类,两种方法核心区别在于,是继承?还是组合?设计模式八大原则之一:优先使用对象组合,而不是类继承。1.3设计步骤a1 先定义一个接口类最为抽象基类ABCa2 定义一系列算法...

2020-03-21 23:39:36

C++设计模式——模板方法(template method)

一、原理讲解模板方法的核心定义一个算法的骨架,而将一些细节方法延迟到之类中实现。其中,算法骨架是不变的部分,细节方法是变化的部分。设计模式的核心思想就是将变化部分和不变部分有效隔离、耦合出来。该思路的实现重要利用c++多态特性,运行时刻,基类指针指向不同的父类,则运行该父类重写的函数(前提:基类中是虚函数)。实现步骤如下:1.1定义一个抽象基类ABC;1.2抽象基类ABC定义两个抽象方...

2020-03-20 22:40:40

删除字符串中第一个重复的 指定字符的左边所有字符 函数总结

本文主要总结一个删除字符串中第一个重复的指定字符的左边所有字符函数,简单来说,就是比如字符串“abcbefg”,比如我要删除第一个重复字符'b'左边所有字符,也就是要删除字符串“abcbefg”中的字符“ab”,剩下的字符是“cbefg”。该问题的解决方法,博主在leecode看到一个非常精妙的解法,代码如下:int left = 0;string s = {abcbdefg};un...

2020-02-05 23:36:51

求字符串中不重复的最长子串的长度(C++,leecode)

求一个字符串中不重复的最长子串时,最简单的办法就是暴力破解法,另一种是巧妙使用指针来求解。暴力破解法虽然简单粗暴,但是效率太低,几乎不实用;后一种巧妙用指针法效率较大,但是需要对指针有较深理解。本文用代码实现的是指针法,暴力破解法有需要的可以自行根据下面思路编程。下面将分别讲解两种方法思路和指针法代码。1.1暴力破解法思路a1 先把字符串的所有子串全部求出,可以参考这篇博客:https:/...

2020-02-05 22:01:55

单链表加法总结(C++,leecode,整形int)

本文主要总结链表加法代码,全文分为两部分,为思路讲解和代码实现。1.1思路讲解链表的加法主要根据小学数学10进制进位方法来解。两个链表数据相加,主要是每个节点对应的数据相加,当有进位标志时,则在下一个节点把这个进位标志加上,即sum=val1+val2+carry。两个链表相加,和的链表长度有两种情况,第一种是等于两个加数链表的最长一个,另一种是比两个加数链表中最常的一个链表长度大一,...

2020-02-05 14:16:35

链表数据结构的创建和调用(C++)

在数据结构与算法中,链表是一个稍微有些难以理解的数据结构。本文主要总结链表的基本编程用法,通过创建一个链表和调用链表每个节点的数据代码,展示基本的链表数据结构用法。1.1原理讲解链表是在物理上可以是非连续的存储空间,由一片片存储区域组成,每个存储区域又被成为节点,每个节点又指向下一个节点,用一个链表头和链表尾串起来,所以被称为链表。链表的每个节点由两部组成,分别是数据区和指针。数据区存储需...

2020-02-04 23:24:43

两数之和2:输入有序数组(leecode)(c++)

在一个有序数组中,找出两个数,使得两数之和等于目标值。数组下标从1开始。输入: numbers = [5,6,7,8,9,10], target = 11输出: [1,2]解释: 5 与 6 之和等于目标值 11 。因此 index1 = 1, index2 = 2 。1.1解题思路有三种常见解法,一种是暴露和哈希表,可以参考博主写的这篇博客https://blog.csdn.ne...

2020-02-04 11:06:53

在一个数组中找出两个数,这两个数之和为指定目标值,返回这两个数下标(leecode)(c++)

本文主要总结在一个数组中取出两个数,这两个数满足条件为:两数之和为制定目标值target,并且函数返回这两个数下表。示例:给定 nums = [5,6,7,8,9,10], target = 19因为 nums[4] + nums[5] = 9 + 10 = 19所以返回 [4, 5]1.1解题思路根据题意,可以看出这是一个组合问题,也就是高中数学常见的排列组合基本问题。...

2020-02-03 18:53:14

C++求字符串所有子串并顺序输出string::substr()

在Leecode做算法题时,经常遇到一些字符串的题目,这些题目有不少是有一种通用解法,也就是暴力解法。用穷举法列出所有可能的结果,然后根据附加条件进一步筛选符合条件的解。本文主要总结的是求出一个字符串中,所有子串,子串是稳定的,也就是说,相对原来的字符串位置顺序不变。下面是总结代码和思路。1.1求解思路比如求解一个字符串“abcdefg”的所有子串,也就是相当于高中的数学组合排列。可以看成...

2020-02-02 22:39:46

程序员必须掌握的核心算法(C++)

本文完全转载如下博客地址,转载目的仅仅只是交流学习,如果侵权,请联系我,我会及时删除和处理!转载原文地址:https://blog.csdn.net/m0_37907797/article/details/102661778 ...

2019-11-03 01:04:04

直接插入排序算法总结(C++代码、Qt)

直接插入算法是一种稳定的(排序前后相同元素相对位置保持不变)排序算法,空间复杂度是,最坏时间复杂度是。一般用在数组基本有序或者数据规模很小的时候非常高效。直接插入排序主要思想是将一个数组分为有序数组和无序数组,然后将无序数组依次插入有序数组中,插入的时候,从无序数组的左边第一个数开始,往有序数组的右边第一个数从右到左插入;当待插入数据小于插入数据时,则该有序数组该位起的右边所有数据,依次向右移动一...

2019-10-29 22:07:54

大根堆排序算法(C++实现、Qt)

堆排序算法是一种选择排序,主要思想是选好一个非叶子节点子树,然后用该子树较大的孩子跟父节点比较,较大者跟父节点交换。如果交换后,孩子节点不满足大根堆排序,则交换依次后,用交换的孩子作为根节点,对该孩子进行大根堆排序,直到所有孩子节点全部满足大根堆排序,然后才继续往上一层节点继续比较排序;下图是对大根堆排序原理图文动态讲解,引用这篇博主(https://blog.csdn.net/LoveHYZ...

2019-10-28 21:43:16

Qt5自定义状态栏QStatusBar外观(背景)和状态栏基本用法(显示普通消息、临时消息、永久消息)

本文主要总结Qt状态栏QSatatuBar用法,通过继承状态栏,自定义状态栏背景图形,以及状态栏三种基本用法。状态栏类QStatusBar主要有显示普通消息、显示定时消息、显示永久消息三种功能。三种都十分常用,下面先总结自定义状态栏外观用法和将状态栏三种用法进行详细讲解和代码编写。一、自定义状态栏外观1.1原理详解状态栏类QStatusBar继承于QWidget,我们继承QStat...

2019-10-19 19:47:05

Qt动态增加和动态删除QWidget内控件(有布局和没有布局都有效)(qDeleteAll、delete、deleteLater、findChildren)

在QWidget界面中,不管是否采用了布局,只要是QWidget的子类,则可以用findchild()函数查找所有子类,然后通过指定函数进行删除。下面是博主总结的两种动态删除dget内控件的方法。一、通过函数qDeleteAll()删除其中,该函数原型有两个,分别如下://第一个原型template <typename ForwardIterator>Q_OUTOFL...

2019-10-19 17:30:19

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。