- 博客(165)
- 资源 (6)
- 收藏
- 关注
原创 数据结构总览
数据结构总览数据结构:线性表-动态数组:https://blog.csdn.net/qq_41605114/article/details/104315027数据结构:单向链表Part1:https://blog.csdn.net/qq_41605114/article/details/104396149数据结构:单向链表Part2:https://blog.csdn.net/qq_...
2020-03-07 10:48:58 178
原创 C++ 基础知识总览
C++ 基础知识总览C++ 构造函数与析构函数,与成员初始化列表语法https://blog.csdn.net/qq_41605114/article/details/88358498C++ 类及OOP编程https://blog.csdn.net/qq_41605114/article/details/88327295C++ this指针(类中的函数成员使用按引用传递时...
2020-02-14 16:43:07 291
原创 C语言要点总结-总览
C语言要点总结参考内容:菜鸟教程:https://www.runoob.com/C运算符及优先级:https://www.runoob.com/cprogramming/c-operators.html字符指针与字符数组真正的区别:https://blog.csdn.net/on_1y/article/details/13030439C 结构体:https://www.run...
2019-09-20 22:42:36 1335
原创 LeetCodeTrie字典树
208. 实现 Trie (前缀树) https://leetcode-cn.com/problems/implement-trie-prefix-tree/typedef struct Trie{ struct Trie * children[26]; int isEnd; } Trie;/** Initialize your data structure here. */Trie* trieCreate() { Trie *node = (Trie
2021-08-12 22:23:45 246
原创 UT HASH
定义HASH表UT_hash_handletypedef struct HashMap { int val; // val保存下标 int key; // key保存值 UT hash 只能用键值进行查找 关键信息放键值 UT_hash_handle hh; // hash map的头}HashMap;前置准备HashMap *hashHandle = NULL;HashMap *tmp = (HashMap *)malloc(sizeof(HashMa
2021-08-11 21:07:57 1272
原创 LeetCode 前缀和&差分数组
差分数组:1109. 航班预订统计https://leetcode-cn.com/problems/corporate-flight-bookings/算法参考:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247487011&idx=1&sn=5e2b00c1c736fd7afbf3ed35edc4aeec&chksm=9bd7f02baca0793d569a9633cc14117e708ccc9...
2021-08-11 08:23:50 362
原创 Git入门操作指南Part2
目录1.建立远端库2.克隆库(clone)3.更新本地库(PULL)在Tortoise Git的帮助下,完成本地和远端的互动。1.建立远端库登录GitHub选择New repository,在远端创建一个新的仓库输入相关的各项信息即可,点击create,即可创建下面,我们需要把本地库的内容,推送到远端去(push操作),在本地库的文件夹处右键,选择push。然后选择要push的分支成功后,界面如下:成功之后,即可在远端看到你已经上传...
2021-07-18 18:20:40 229 1
翻译 Git入门操作指南Part1
将介绍Git的基本操作及对应Tortoise Git的操作参考资源:https://www.bilibili.com/video/BV1pW411A7a5?p=15目录1.基本操作列表初始化查看状态添加(将文件从工作区添加到暂存区)提交(将暂存区文件提交到本地库)查看日志(历史版本)回退分支2.具体操作演示2.1.git初始化(git init)2.2.设置签名2.3.添加文件2.4.将文件添加到暂存区(add)2.5.查看版本(日志)..
2021-07-18 16:59:04 568
原创 C 语言算法操作
130. 被围绕的区域 https://leetcode-cn.com/problems/surrounded-regions/const int dx[4] = {1, -1, 0, 0};const int dy[4] = {0, 0, 1, -1};void solve(char** board, int boardSize, int* boardColSize) { int row = boardSize; if (row == 0) { return;
2021-07-17 20:59:09 699
原创 C++ 泛型编程(GP)函数模板
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Facade“接口隔离”模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。典型模型Facade(门面模式)Proxy(代理模式)Adapter(适配器)Mediator(中介者)动机(Motivation)示例要点总结...
2021-06-21 15:39:09 485
原创 C++ 设计模式 单件模式
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Singleton面向对象很好地解决了"抽象"的问题,但是必不可免地付出一定的代价,对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。“对象性能”模式典型模式:SingletonFlyweight动机(Motivation)在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中存在一个实例,才能确保它们的逻辑正确性,以及良好的效率。如果绕过常规的构
2021-05-17 20:22:41 224
原创 C++ 设计模式 享元模式
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Flyweight面向对象很好地解决了"抽象"的问题,但是必不可免地付出一定的代价,对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。“对象性能”模式典型模式:SingletonFlyweight动机(Motivation)在软件系统采用纯粹对象方案的问题在于大量细颗粒的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价如何在
2021-05-17 11:03:00 163
原创 C++ 设计模式 解析器
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Interpreter在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域下的一般性解决方案。典型模式:Interpreter动机(Motivation)在软件构建过程中,如果某一特定领域的问题比较复杂,类似的结构不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构.
2021-05-16 20:24:32 215
原创 C++ 设计模式 访问器
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Visitor动机(Motivation)“行为变化”模式在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。典型模式:CommandVisitor示例要点总结...
2021-05-15 20:50:07 204
原创 C++ 设计模式 命令模式
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Command“行为变化”模式在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。典型模式:CommandVisitor成员函数一般分为两类,虚函数和非虚函数(或静态),非虚函数(或静态)是编译的时候以地址的形式直接绑定,虚函数是运行时通过虚函数指针进行绑定动机(Motivation)在软件构建过
2021-05-14 15:29:00 167
原创 C++ 设计模式 职责链
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Composite“数据结构”模式常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。典型模式CompositeIteratorChain of Resposibility动机(Motivation)在软件构建过程中,一个请求可能被
2021-05-14 15:12:47 484 1
原创 C++ 设计模式 迭代器
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Iterator“数据结构”模式常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。典型模式CompositeIteratorChain of Resposibility动机(Motivation)在软件构建过程中,集合对象内部结.
2021-04-29 17:36:44 163
原创 C++ 设计模式 组合模式
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Composite“数据结构”模式常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。典型模式CompositeIteratorChain of Resposibility动机(Motivation)示例要点总结...
2021-04-25 16:56:14 211
原创 C++ 设计模式 备忘录
以下内容均来自GeekBand极客班C++ 设计模式课程(李建忠老师主讲)Memento“状态变化”模式在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供一种解决方案。典型模式stateMemento动机(Motivation)在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需求,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象
2021-04-25 16:42:54 169 2
原创 C++ 设计模式 状态模式
State“状态变化”模式在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供一种解决方案。典型模式stateMemento动机(Motivation)在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生改变,不如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合。《设计模.
2021-04-23 20:01:11 200
原创 C++ 设计模式 中介者模式
Mediator“接口隔离”模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。典型模型Facade(门面模式)Proxy(代理模式)Adapter(适配器)Mediator(中介者)动机(Motivation)在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的..
2021-04-23 16:35:02 229 1
原创 C++ 设计模式 适配器
Adapter“接口隔离”模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。典型模型Facade(门面模式)Proxy(代理模式)Adapter(适配器)Mediator(中介者)动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的.
2021-04-23 15:20:43 109
原创 C++ 设计模式 代理模式
Proxy“接口隔离”模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。典型模型Facade(门面模式)Proxy(代理模式)Adapter(适配器)Mediator(中介者)动机(Motivation)在面对对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等,直接访问会给使用者,或者操作系统结构带来很多麻
2021-04-23 11:05:11 139
转载 C++ 设计模式 门面模式
Facade“接口隔离”模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。典型模型Facade(门面模式)Proxy(代理模式)Adapter(适配器)Mediator(中介者)动机(Motivation)示例要点总结...
2021-04-23 10:18:01 115
原创 C++ 设计模式 构建器
Builder“对象创建”模型通过“对象创建”模式绕开new,避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式Factory MethodAbstract FactoryPrototypeBuilder动机(Motivation)在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一
2021-04-22 21:01:26 536 3
原创 C++ 设计模式 原型模式
Prototype“对象创建”模型通过“对象创建”模式绕开new,避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式Factory MethodAbstract FactoryPrototypeBuilder动机(Motivation)在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客
2021-04-22 16:53:01 131
原创 C++ 设计模式 抽象工厂模式
Abstract Factory“对象创建”模型通过“对象创建”模式绕开new,避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式Factory MethodAbstract FactoryPrototypeBuilder动机(Motivation)和工厂方法非常类似,都是解决同一类问题在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。
2021-04-22 16:21:57 127
原创 C++ 设计模式 工厂模式
Facotry Method“对象创建”模型通过“对象创建”模式绕开new,避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式Factory MethodAbstract FactoryPrototypeBuilder动机(Motivation)在软件系统中,经常面临着常见对象的工作,由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“
2021-04-22 11:13:58 172
原创 C++ 设计模式 桥模式
Bridge“单一职责”模式:在软件组件的设计中,如果责任划分不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码(典型的Bad smell),这时候的关键是划分责任。典型模式:DecoratorBridge动机(Motivation)由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。现在有如下示例,一个多平台的消息系统示例class Messagerclass Messager{public:
2021-04-11 11:06:25 142
原创 C++ 设计模式 装饰模式
Decorator“单一职责”模式:在软件组件的设计中,如果责任划分不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码(典型的Bad smell),这时候的关键是划分责任。典型模式:DecoratorBridge动机(Motivation)在某些情况下,我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增加),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。
2021-04-08 17:16:15 171
原创 C++ 设计模式 观察者模式
Observer“组件协作”模式:现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作模式”通过晚绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。典型模式:Template MethodStrategyObserver/Event动机(Motivation)在软件构建过程中,我们需要为某些对象建立一种“通过依赖关系”——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很
2021-04-07 21:54:43 136
原创 C++ 设计模式 策略模式
“组件协作”模式:现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作模式”通过晚绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。典型模式:Template MethodStrategyObserver/Event...
2021-04-07 10:51:08 146
原创 C++ 设计模式 模板方法
Template Method动机(Motivation)在软件构建过程中,对于某一项任务,它常常有稳定的整体操作骨架结构,但各个子步骤却有很多改变的需求,或者由于固有原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。使用Template Method即可在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期需求?《设计模式》GOF定义:“定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类不改变(复用)一个算
2021-04-06 20:39:29 151
原创 C++ 设计模式 面向对象设计原则
C++ 设计模式 面向对象设计原则因为"变化"的存在,为软件设计带来了复杂性,那么如何解决?分解:分而治之,大问题分解为小问题 抽象:由于不能掌握全部的复杂对象,选择忽视它的非本质细节,而去处理泛化和理想化的对象模型。下面以画图为目的(图形工具),进行分解和抽象两种解决方案的演示:按照C++的编程规范,不同职责的类应该处于不同的文件中,而字段(成员变量)一般都是private类型,此处为了更方便的展示思想,会忽略部分编程规范。分解版本:class Pointc...
2021-04-06 11:04:18 178
原创 C++ 设计模式
C++ 设计模式内容参考:《设计模式:可复用面向对象软件的基础》面向对象设计原则模板方法策略方法观察者模式装饰模式桥模式工厂方法抽象工厂原型模式构造器单件模式享元模式门面模式代理模式适配器中介者状态模式备忘录组合模式迭代器职责链命令模式访问器解析器总结...
2021-04-06 09:46:06 138
原创 Leetcode 高频考题整理
You can't always get what you wantBut if you try sometimes well you just might findYou get what you need——The Rolling Stones 《Let it Bleed》目录链表树各大排序滑动窗口HashHash + 滑动窗口回溯算法双指针DFS/BFS二分归并/数学动态规划背包问题完全背包栈其他链表92. .
2021-03-06 19:56:09 2558
原创 重构(Martin Fowler)——处理概括关系
有一批重构手法专门用来处理类的概括关系(继承关系),其中主要是将函数上下移动于继承体系中Pull Up Field 和 Pull Up Method都用于将特性向继承体系的上端移动Push Down Method 和 Push Down Field 则将特性向继承体系的下端移动构造函数比较难以向上拉动,因此专门有一个Pull Up Constructor Boby处理它我们不会将构造函数往下推,因为Replace Constructor with Factory Method通常更管用.
2021-03-05 21:15:10 656
原创 重构(Martin Fowler)——简化函数调用
在对象技术中,最重要的概念莫过于“接口”(interface)。容易被理解和被使用的接口,是开发良好面向对象软件的关键。最简单也最重要的一件事就是修改函数名称。名称是程序写作者与阅读者交流的关键工具。只要你理解一段程序的功能,应该大胆使用Rename Method将你所知道的东西传给其他人。函数参数在接口之中扮演十分重要的角色。Add Parameter 和 Remove Parameter都是很常见的重构手法。可以对参数列进行增删。如果同一个对象的多个值被当作参数传递,你可以运用P..
2021-02-24 16:44:32 657
原创 重构(Martin Fowler)——简化条件表达式
条件逻辑有可能十分复杂,因此本章提供一些重构手法,专门用来简化它们。其中一项核心重构就是Decompose Conditional将一个复杂的条件逻辑分成若干小块。本章的其余重构手法可用以处理另一些重要问题:如果你发现代码中的多处测试有相同的结果,应该实施Consolidate Conditional Expression如果条件代码中有任何重复,可以运用Consolidate Duplicate Conditional Fragments面对对象程序的条件表达式通常比较少,因为很多条件
2021-02-23 11:39:58 545
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人