自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (2)
  • 收藏
  • 关注

转载 URL中文 encode decode

url 中文 encode decode

2023-05-09 17:04:59 111

原创 《C和指针》—— 第13章 函数指针的作用1:回调函数2(与模板结合,简化代码)

注意:此为原创文章,未经同意,请勿随意转载。目录1. 问题与思路2. 具体实现3. 结果截图1. 问题与思路Q:实现一个与类型无关的比较函数,且考虑模板,精简代码A:声明一个函数指针,函数指针中的形参类型得声明成void*,这样任何类型都可以传递进来,也就是说,传给函数指针的参数是指向某种类型数据的指针,这样,入参类型就不受限制啦;有2个细节需要注意:细节1:对于简单数据类型(如int\float\double\char\string等, 直接用模板搞定。对于复杂数据类型,如自定义类类型数据,

2022-02-13 14:22:37 653

原创 《C和指针》—— 第13章 函数指针的作用1——回调函数1

1. 问题与思路Q:实现一个与类型无关的比较函数A:声明一个函数指针,每种类型各自实现自己的比较函数,函数指针指向具体类型的比较函数,即可实现类似模板的功能;特别值得注意一点:函数指针中的形参类型得声明成void,这样任何类型都可以传递进来,也就是说,传给函数指针的参数是指向某种类型数据的指针,这样,入参类型就不受限制啦~*升级版:其实还可以考虑模板,减少重复代码,见博客:2. 具体实现#pragma once#include <iostream>#include <str

2022-02-13 14:02:51 406

原创 《C和指针》—— 第13章 高级指针 int *(*(*(*f)())[6])()

学习高级指针,理解指针原理

2022-02-13 01:55:54 882 2

原创 《大话设计模式》C++实现:02 策略模式(三)—— 策略模式

文章目录1、优缺点1.1、优点1.2、缺点1.3、优化2、代码2.1、结果2.2、代码2.2.1、Strategy.h2.2.2、Context.h1、优缺点1.1、优点相较于简单定义各算法,将各算法组织起来并进行了一定的封装,方便了不同算法之间的切换。笔者感受:使用类C操控类A继承体系A1,A2,A3中公有对外暴露接口。利用一个额外的类,(1)将strategy抽象策略基类,作为额外类的入参;(2)将strategy抽象策略基类作为额外类的成员变量,利用多态原理,接收外面传来的具体抽象策略。

2020-11-18 21:24:54 158

原创 《大话设计模式》C++实现:02 策略模式(四)——(策略模式+简单工厂)

文章目录1、好处2、代码2.1、结果2.2、代码2.2.1 Strategy.h2.2.2、StrategyFactory.h1、好处策略模式+简单工厂:可以完全将策略继承体系与用户端完全剥离开来,将策略继承体系完全封装起来,对用户完全不可见。抽象总结一下:(1)类C里面通过没什么信息含量的枚举入参,利用简单工厂生成类A继承体系中的各子类A1、A2、A3。同时,用基类A作为类C的成员变量,接一下刚生成的类A的子类。(2)类C对外统一暴露一个接口,该接口中,类C的成员变量类A调用继承体系公有对外暴露

2020-11-18 21:08:11 172

原创 《大话设计模式》C++实现:02 策略模式(一)商场促销实例-初始版本(switch_case)

文章目录1. 什么是策略模式?2. 策略模式的适用场景?2.1 优缺点2.1.1 好处2.1.2 当心2.2 何时使用?3. 怎样使用策略模式?3.1 方法3.2 UML类图演进3.2.1 version1 (本篇博文的demo)4. 实例4.1 结果(结论先行)4.2 具体实现5. 策略模式-相关链接1. 什么是策略模式?策略模式(strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。2. 策略模式的适用场景?2.1 优缺点2.

2020-11-18 20:36:51 360

原创 沟通——如何做一个好的倾听者?

1、增进倾听技巧的10个方法此为《沟通圣经》读书笔记~~

2020-11-11 22:02:28 167

原创 《大话设计模式》C++实现:24 职责链模式(二)请假加薪实例-改进

文章目录1. UML类图2. 实例2.1 结果(结论先行)2.2 具体实现2.2.1 Request.h2.2.2 IManager.h2.2.3 CommonManager.h2.2.4 Majordomo.h2.2.5 GeneralManager.h1. UML类图2. 实例2.1 结果(结论先行)main.cpp#include "IManager.h"#include "CommonManager.h"#include "Majordomo.h"#include "Genera

2020-10-05 23:01:37 175

原创 《大话设计模式》C++实现:24 职责链模式(三)抽象总结

文章目录1. UML类图抽象2. 实例2.1 结果(结论先行)2.2 具体实现2.2.1 IHandler.h2.2.2 ConcreteHandler1.h2.2.3 ConcreteHandler2.h2.2.4 ConcreteHandler3.h1. UML类图抽象2. 实例2.1 结果(结论先行)main.cpp#include "IHandler.h"#include "ConcreteHandler1.h"#include "ConcreteHandler2.h"#incl

2020-10-05 22:11:31 145

原创 《大话设计模式》C++实现:24 职责链模式(一)请假加薪实例-初始版本

文章目录1. 什么是职责链模式?2. 职责链模式的适用场景?2.1 优缺点2.2 何时使用?3. 怎样使用职责链模式?3.1 方法3.2 UML类图演进3.2.1 version1v1 存在的问题v1 重构方向4. 实例4.1 结果(结论先行)4.2 具体实现4.2.1 Request.h4.2.1 Manager.h1. 什么是职责链模式?职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免球球的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这

2020-10-04 20:42:00 217

原创 《大话设计模式》C++实现:23 命令模式(三)抽象总结

1. UML类图抽象2. 实例2.1 结果(结论先行)main.cpp#include "Receiver.h"#include "ICommand.h"#include "ConcreteCmd.h"#include "Invoker.h"void test(){ CReceiver* pRcv = new CReceiver(); ICommand* pCmd = new ConcreteCmd(pRcv); Invoker* pInvk = new Invoker();

2020-10-04 14:27:48 1672 3

原创 《大话设计模式》C++实现:23 命令模式(二)进阶版2

1、场景说明完善了 《大话设计模式》C++实现:23 命令模式(二)进阶版 中删除订单功能。2、代码2.1、结果main.cpp//松耦合方式2: 进阶版2#include "ICommand.h"#include "BakeMuttonCmd.h"#include "BakeChickenWingCmd.h"#include "Waiter.h"void test2(){ CBarbecuer* boy = new CBarbecuer(); ICommand* pBake

2020-10-04 12:06:14 264

原创 《大话设计模式》C++实现:23 命令模式(二)进阶版

文章目录1、场景说明2、代码2.1、结果2.2、代码1、场景说明相较基础版:《大话设计模式》C++实现:23 命令模式(一)基础版:增加了时间、加订单,删订单(只留了接口)、一次通知全部的菜单的功能。2、代码2.1、结果//松耦合方式2: 进阶版#include "ICommand.h"#include "BakeMuttonCmd.h"#include "BakeChickenWingCmd.h"#include "Waiter.h"void test2(){ CBarbe

2020-09-30 20:41:30 208 1

原创 《大话设计模式》C++实现:23 命令模式(一)基础版

1. 什么是命令模式?命令模式(Command):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。2. 命令模式的适用场景?2.1 优缺点优点:第一、能较容易地设计一个命令队列第二、在需要的情况下,可以较容易地将命令计入日志第三、允许接收请求的一方决定是否否决请求第四、可以容易地实现对请求的撤销和重做第五、由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。最关键优点:命令模式将请求一个操作的对象与指导怎

2020-09-29 23:31:27 289

原创 NotePad++按指定字符换行

步骤:1 原始文件->2 全选->3 Ctrl+F->4 Replace->5 Search Mode: Regular expression->6 Find what:,->7 Replace with:\r->8 Replace All

2020-09-28 21:09:36 7490

转载 Git – fatal: Unable to create ‘XXX/.git/index.lock’: File exists.的解决办法

方法:在.git同级目录,执行rm -f .git/index.lock (或者rm -f git/index.lock) 删除后可提交。成功!来源

2020-08-30 09:55:50 913

原创 《大话设计模式》C++实现:01 简单工厂模式(优化,使用宏注册工厂)

一、代码1、结果1.1 main.cpp#include "Operation.h"#include "OperationFactory.h"#include "OperationAdd.h"#include "OperationSub.h"#include "OperationMul.h"#include "OperationDiv.h"void test(){ double numA = 200, numB = 100; cout << "A = " <&lt

2020-08-21 23:52:50 515

原创 《大话设计模式》C++实现:01 简单工厂模式

文章目录1. 什么是简单工厂模式?2. 简单工厂模式的适用场景?2.1 优点2.2 缺点3. 怎样使用简单工厂模式?3.1 方法3.2 UML类图4. 实例4.1 结果(结论先行)4.2 具体实现4.2.1 操作符集成体系代码4.2.2 简单工厂的静态接口1. 什么是简单工厂模式?当出现批量化的产品时,使用单独的类创建每个产品,实现去实例化对象。2. 简单工厂模式的适用场景?2.1 优点1、降低了客户与具体实现的耦合(相较不使用简单工厂而言)。封装了细节,客户只需调用工厂接口,不必关心如何创建产

2020-08-21 22:42:32 303

原创 《大话设计模式》C++实现:08 工厂模式

先上代码,后续补充~~1. 什么是迭代器模式?2. 迭代器模式的适用场景?3. 怎样使用迭代器模式?4. 实例1. 结果(结论先行)#include <iostream>#include "AddFactory.h"#include "SubFactory.h"#include "MulFactory.h"#include "DivFactory.h"#include "Operation.h"using namespace std;void test0(){

2020-08-16 23:40:30 287

原创 EMD距离——使用实例

Rubner的C语言实现首先我们尝试使用Rubner桑公开的C语言代码(example1.c),编译依赖emd.c和emd.h。其中特征量类型feature_t在emd.h中定义如下:typedef struct { int X,Y,Z; } feature_t;具体实现代码见emd.c。对于上述例子的解答如下:# include &lt;stdio.h&gt;# include &lt;...

2020-07-22 22:37:09 442

原创 《大话设计模式》C++实现:20 迭代器模式

1、什么是迭代器模式?1、迭代器模式(Iterator),提供了一种顺序访问一个聚合对象中各个元素,而又不保留该对象的内部表示的方法。2、简单来说,迭代器模式,分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地党文集合内部的数据。3、类似于 foreach in ,它就是不需要知道集合对象是什么,就可以遍历所有对象的循环工具。2、迭代器模式的适用场景?1、当需要访问一个聚集对象,且,不管这些对象是什么,都需要遍历的时候,应该考虑迭代器模式。

2020-07-18 19:59:30 234

原创 《大话设计模式》C++实现:07 代理模式(二)

3、怎样使用代理模式?初级,boy找代理追girl:《大话设计模式》C++实现:07 代理模式(一)升级,公共接口,真实实体,代理4、实例1、ISubject.h#pragma onceclass ISubject{public: virtual void Request() = 0;};2、RealSubject.h#pragma once#include "ISubject.h"#include <iostream>using namespace std;

2020-07-17 20:49:25 156

原创 《大话设计模式》C++实现:07 代理模式(一)

1、什么是代理模式?简而言之:代理模式就是在访问对象时,引入一定程度的间接性,因为这种间接性,可以附加多种用途。GoF描述:代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。2、代理模式的适用场景?3、怎样使用代理模式?初级,boy找代理追girl4、实例1、IGiveGift.h 公共接口函数#pragma onceclass IGiveGift{public: virtual void giveDools() = 0; virtual void give

2020-07-15 22:46:27 191

原创 《大话设计模式》C++实现:14 观察者模式(一)

其他后续跟上,先埋个坑,改天填坑~~1、什么是观察者模式2、为何要是用观察者模式3、如何才能用好观察者模式?4、怎样使用观察者模式?4.1 观察者模式的演进双向耦合单向解耦(解耦 具体观察者与 通知者)双向解耦(解耦 具体观察者 与 具体通知者)5、实例...

2020-07-10 09:17:06 235

原创 《大话设计模式》C++实现:17 适配器模式

1、 适配器模式是什么?Adapter:将一个类接口为转化作为客户希望的另一个接口。使得原本而由于接口不兼容而不能一起工作的那些类可以一起工作。2、 为何要使用适配器模式?在软件开发中,系统的数据和行为都正确,但接口不符时,我们需要考虑适配器,目的:是控制范围之外的一个原有对象与某个接口匹配。主要应用在希望服用一些现存的类,但是接口又与复用环境要求不一致的情况。如:在早期对代码笃用一些功能等应用上很有实际价值。3、 如何使用适配器模式?简单的UML图:4、 怎样才能用好适配器模式?(1

2020-07-07 23:05:02 220

原创 《C++ Primer》学习记录(2)const关键字

以上整理了《C++ Primer》与《Effective C++》。有不当之处,还望讨教~~

2020-07-05 21:55:58 137

原创 《C++ Primer》学习记录(1) 使用指针遍历多维数组的三种方式

void test9(){ //使用指针遍历多维数组 constexpr int row = 3; constexpr int col = 4; int a[row][col] = { { 0,10,20,30 },{ 40,50,60,70 },{ 80,90,100,110 } }; cout << "==================================1st way" << endl; cout << "for (auto p = a;

2020-06-27 19:19:11 532

原创 CFileDialog、CStdioFile读取文件中的内容,每行按空格依次读入

CFileDialog、CStdioFile读取文件中的内容,每行按空格依次读入注:1、该文件为固定为3列的小数txt文件,且数字之间以空格隔开2、CFileDialog 与 CStdioFile 类:class CFileDialog : public CCommonDialog //afxdlgs.hclass CStdioFile : public CFile //afx.hCF...

2019-01-11 20:55:06 993 1

原创 C++ ifstream、sstream按行读取txt文件中的内容,并按特定字符分割,不用strtok

C++ ifstream、sstream按行读取txt文件中的内容,并按特定字符分割,不用strtok一、预备知识:主要用到:1、getline(ifstream in, string line);将文件in中的数据按行读取到line中2、getline(stringstream ss,string tmp,const char ch);将输入字符串流ss中的字符,按ch分割开,依次...

2019-01-11 20:11:53 16171 2

原创 Unicode字符集、多字节字符集下:CString->const char*、CString->LPCSTR

Unicode字符集、多字节字符集下:CString-&amp;gt;const char*、CString-&amp;gt;LPCSTR1、CString-&amp;gt;const char*(1)多字节字符集下:CString-&amp;gt;LPCTSTR可以自动转化!(2)Unicode下:使用函数 “wsprintfA”// BmpName-&amp;gt;cstr_BmpName;// CString BmpNa...

2019-01-11 17:35:43 682

原创 mwArray的get函数用法

mwArray的get函数用法1、应用:在matlab与C++混合编程中:使用get函数将mwArray类型的数组中的数据存入vector&amp;lt;vector&amp;lt;double&amp;gt;&amp;gt; v中:mwArray a(col, row, mxDOUBLE_CLASS, mxREAL);//列优先,先列后行: 构建一个 col列 X row行 的matlab矩阵a.Get(1, co...

2018-12-07 13:04:03 4308 3

原创 C++ 四种数据交换的函数

C++ 四种数据交换的函数//使用异或操作实现原位数据交换//只对整数有效!!//引用+异或 方法1void myswap(int &amp;amp;amp;amp;a, int &amp;amp;amp;amp;b){ a = a^b; b = a^b; a = a^b;}//原位数据交换 不借助第三个变量//只适用于简单同种单一类型的数据(如int\float\double\char)//引用+“+-”四则运算符 ...

2018-11-28 18:32:57 4109

原创 C++ 模板化的student类对象的直接插入排序, 运算符重载,模板,两种模板化的交换数据函数

C++ 模板化的student类对象的直接插入排序, &amp;amp;amp;gt;、&amp;amp;amp;lt;、&amp;amp;amp;lt;&amp;amp;amp;lt;运算符重载,模板,两种模板化的交换数据函数1、student类对象(1)基本成员变量和成员函数定义:class student{private: string name; double score; int *index;public: student() :index(NU

2018-11-28 17:49:51 515

原创 C++ 使用数组建立二叉树 层序数组(方法二)

C++ 使用数组建立二叉树 层序数组(方法二)另外一种方法:见 C++ 使用数组建立二叉树 层序数组(方法一)试验中,遍历二叉树的非递归方法 见我的另一篇博客:二叉树的非递归遍历——前序、中序、后序、层序、层序按行输出1、输入数组要求数组是按照层序输入的,当该结点为空时,用‘#’代替空的位置。2、核心代码//层序数组构建二叉树BinaryTreeNode *ConstructBina...

2018-11-27 13:14:38 2917 5

原创 二叉树的非递归遍历——前序、中序、后序、层序、层序按行输出

二叉树的非递归遍历——前序、中序、后序、层序、层序按行输出一、自己总结归纳的二叉树的非递归遍历——前序、中序、后序、层序、层序按行输出层序和前序的程序代码特别像,只有两点差别:1、只是层序用到queue,前序用的stack2、前序先push了右孩子,再push左孩子层序先push了左孩子,再push右孩子//层序遍历void LevelOrder(BinaryTreeNode *T...

2018-11-27 12:55:27 436 1

原创 C++使用数组构造链表

C++使用数组构造链表1、链表的定义struct Node{ int value; struct Node* next;};2、使用数组构造链表Node *createList_array(int *a, int n){ Node *root = new Node(); Node *pnode = root; for (int i = 0; i &amp;lt; n - 1; +...

2018-11-02 18:41:05 5903

原创 函数指针的作用

函数指针的作用函数指针的作用有二:一是作为参数传递给另一个函数;二是转换表。1、函数指针作为参数传递给另一个函数回调函数:将一个函数指针作为参数传递给其它函数。后者将“回调”用户函数。实例:实现一个与类型无关的查找函数(单链表)思考:单链表的元素类型可能是字符串或者数组,数组和字符串无法作为参数传递给函数,但是指向他们的指针却可以。要求:需要查找函数作用于任何类型的值解决办法:把...

2018-11-02 18:30:58 14208

原创 指针拾遗|||——指针数组、数组指针、函数指针、函数指针数组

指针拾遗|||——指针数组、数组指针、函数指针、函数指针数组

2018-11-02 17:37:19 177

原创 指针运算拾遗 ||

指针运算拾遗 ||1、*++p;2、++*p;3、*p++;4、(*p)++;5、++*++p;6、++*p++;//////////////////////////////////////////////////////////////////////////////1、*++p; 相当于 *(++p);2、++*p; 相当于 ++(*p); 即 *p = *p + 1;...

2018-10-30 18:53:12 145

GitHub网页使用技巧

GitHub网页使用技巧图文教程——新建仓库、上传文件、创建新文件夹、上传图片。

2018-10-24

SVD算法_C++版本

经本人测试,完全可以运行,放心使用。 C++实现矩阵的SVD分解,矩阵基本运算“+,-,*,/”,三角分解,QR分解,矩阵显示,矩阵转置,矩阵特征值与特征向量运算. 并在 Source.cpp中附有使用例子代码,方便读者快速上手。 对于SVD分解,经过与matlab中结果对比,发现,当矩阵的列数>=行数时,基本没问题。

2017-10-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除