C++
coder-HRQ
课题分离
展开
-
vs2013开发C++动态库(匿名接口)
1.生成dll.1.1 创建空项目:1.2 添加头文件.h和.cpp1.3 设置项目属性1.4 通过Dependency Walker查看dll信息1.5 调用例子:2.生成匿名库2.1在原来例子上加入.def文件加入:2.2 调用:...原创 2020-12-16 00:11:37 · 240 阅读 · 0 评论 -
剑指Offer第34题(丑数)
(本博客旨在个人总结回顾)题目描述: 我们把只包含因子2、3和5的数称为丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,但14不是,因为她包含因子7。习惯上我们把1当做第一个丑数。书上提供两种做法:1、比较直观,直接遍历自然数,判断该值是否有丑数,找到第1500个丑数;解法一:(效率太低)#include ...原创 2020-11-29 14:28:56 · 124 阅读 · 0 评论 -
剑指Offer第33题(把数组排成最小的数)
(本博客旨在个人总结回顾)题目描述: 输入一个整数数组,把数组里所有的数字拼接一起排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这3个数字能排成的最小数字321323.解题思路:(此解法存在大数问题,将等同数组转换为字符串就可以避开大数问题。)将数组转换为位数相同的等同数组,将其排序,(特殊值,比如0,不能放在第...原创 2020-11-29 14:28:38 · 121 阅读 · 0 评论 -
中介者模式(C++实现)
(本博客旨在个人总结回顾)1、详情:中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。说明:优点:①降低了类的复杂度,将一对多转化成了一对一。②各个类之间的解耦。③符合迪米特原则。缺点:中介者会庞大,变得复杂难以维护。使用场景:①系统中对象之间存在比较复杂的引用关系,导...原创 2019-08-07 17:54:36 · 1004 阅读 · 0 评论 -
观察者模式(C++实现)
(本博客旨在个人总结回顾)1、详情:观察者模式:定义对象间一种一对多的依赖关系,以便当该对象状态发生改变时,所有依赖它的对象都得到通知并自动刷新。说明:优点:①观察者和被观察者是抽象耦合的。②建立一套触发机制。缺点:①如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。②如果在观察者和观察目标之间有循环依赖的话,观察目标会触...原创 2019-08-14 11:43:17 · 1096 阅读 · 0 评论 -
设计模式学习之路(C++实现)
(本博客旨在个人总结回顾)1、概括: 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、增强代码可读性、保证代码可靠和易扩展。2、类型:(GOF 23种设计模式)2.1 创建型模式:2.1.1 工厂方法模式(Factory Pattern)(建议了解一下简单工厂模式)简要说明:定义一个用于创建对象的接口,让...原创 2019-08-15 16:48:30 · 2544 阅读 · 0 评论 -
迭代器模式(C++实现)
(本博客旨在个人总结回顾)1、详情:迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而有不暴露该对象的内部表示。说明:优点:①它支持以不同的方式遍历一个聚合对象。②迭代器简化了聚合类。③在同一个聚合上可以有多个遍历。④在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。缺点: 由于迭代器模式将存储数据和遍历数据的职责分...原创 2019-08-07 12:35:29 · 252 阅读 · 0 评论 -
代理模式(C++实现)
(本博客旨在个人总结回顾)1、详情:代理模式:为其他对象提供一个代理以控制对这个对象的访问。说明:优点:①职责清晰。 ②高扩展性。 ③智能化。缺点:①由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 ②实现代理模式需要额外的工作,有些代理模式的实现非常复杂。使用场景:按职责来划分,通常有以下使用场景: ①远程代理。 ②虚拟代...原创 2019-08-02 12:22:15 · 602 阅读 · 0 评论 -
共享模式(C++实现)
(本博客旨在个人总结回顾)1、详情:共享模式:运用共享技术有效支撑大量细粒度的对象。说明:优点:大大减少对象的创建,降低系统的内存,使效率提高。缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。2.1、UML类图:2.2、例子源码stdafx.h// stdaf...原创 2019-08-01 20:08:05 · 491 阅读 · 0 评论 -
解释器模式(C++实现)
(本博客旨在个人总结回顾)1、详情:解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。说明:优点:①可扩展性比较好,灵活。②增加了新的解释表达式的方式。③易于实现简单文法。缺点:①可利用场景比较少。②对于复杂的文法比较难维护。③解释器模式会引起类膨胀。 ④解释器模式采用递归调用方法。使用场...原创 2019-08-05 20:00:08 · 553 阅读 · 0 评论 -
备忘录模式(C++实现)
(本博客旨在个人总结回顾)1、详情:备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原保存的状态。说明:优点:①给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。②实现了信息的封装,使得用户不需要关心状态的保存细节。缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的...原创 2019-08-07 20:05:57 · 259 阅读 · 0 评论 -
状态模式(C++实现)
(本博客旨在个人总结回顾)1、详情:状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎改变了它所属的类。说明:主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。优点:①封装了转换规则。②枚举可能的状态,在枚举状态之前需要确定状态种类。③将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需...原创 2019-08-14 16:11:39 · 392 阅读 · 0 评论 -
策略模式(C++实现)
(本博客旨在个人总结回顾)1、详情:策略模式:定义一系列算法,把它们一个个封装起来,使得它们可以相互替换。策略模式使得算法变化可独立于使用它的用户。说明:优点:①算法可以自由切换。②避免使用多重条件判断。③扩展性良好。缺点:①策略类会增多。②所有策略类都需要对外暴露。2.1、UML类图:2.2、例子源码stdafx.h// st...原创 2019-08-14 17:34:25 · 1677 阅读 · 0 评论 -
模板方法模式(C++实现)
(本博客旨在个人总结回顾)1、详情:策略模式:定义一个操作中的算法骨架,将一些步骤延时到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。说明:主要解决:一些方法通用,却在每一个子类都重新写了这一方法。优点:①封装不变部分,扩展可变部分。②提取公共代码,便于维护。③行为由父类控制,子类实现。缺点:每一个不同的实现都需要一...原创 2019-08-14 18:23:02 · 193 阅读 · 0 评论 -
访问者模式(C++实现)
(本博客旨在个人总结回顾)1、详情:访问者模式:表示一个作用于某对象结构中各元素的操作。它可以使你在不改变这些元素的类的前提下,定义作用于这些元素的新操作。说明:优点:①符合单一职责原则。②优秀的扩展性、灵活性。缺点:①具体元素对访问者公布细节,违反了迪米特原则。②具体元素变更比较困难。③违反了依赖倒置原则,依赖了具体类,没有依赖抽象。使用场景:...原创 2019-08-15 16:47:58 · 305 阅读 · 0 评论 -
SDL窗口拉伸时显示YUV
(本博客旨在个人总结回顾)本例子是在雷神的SDL例子基础上改的,发现雷神的例子上实现yuv数据显示时进行窗口拉伸,发现显示异常。(原因:视频播放时,需要窗口资源,窗口拉伸时也需要窗口资源,而且两者在不同线程中,同时时访问同个资源就需要加锁来解决)效果:关键源码:// testSDL.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"...转载 2019-09-19 11:47:33 · 649 阅读 · 0 评论 -
命令模式(C++实现)
(本博客旨在个人总结回顾)1、详情:命令模式:将一个请求封装成对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。说明:优点:①降低了系统耦合度。 ②新的命令可以很容易添加到系统中去。缺点:使用命令模式可能会导致某些系统有过多的具体命令类。使用场景:认为是命令的地方都可以使用命令模式,比如: ①GUI 中每一个按钮都是一条命令。 ②...原创 2019-08-05 16:47:06 · 266 阅读 · 0 评论 -
装饰模式(C++实现)
(本博客旨在个人总结回顾)1、详情:装饰模式:动态地给一个对象添加一些额外的职责,就扩展功能而言,装饰模式比生成子类更为灵活。说明:何时使用:在不想增加很多子类的情况下扩展类。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点:多层装饰比较复杂。使用场景:①扩展一个类的功能。 ②动态增加功能,动态...原创 2019-07-26 17:43:25 · 304 阅读 · 0 评论 -
组合模式(C++实现)
(本博客旨在个人总结回顾)1、详情:组合模式:将对象组合成树形结构以表示"部分--整体"的层次结构。composite使得客户对单个对象和复合对象使用具有一致性。说明:何时使用:在需求中是体现部分与整体层次的结构是,以及在我们希望用户可以忽略组合对象和单个对象的不同,统一地使用组合结构中的所有对象时,此时就可以考虑组合模式。优点:①高层模块调用简单。 ②节点自由增加。缺点...原创 2019-07-26 16:14:14 · 296 阅读 · 0 评论 -
Visual Studio 2013 调用第三方库路径安排
(本文章旨在个人回顾知识点)1.使用的开发环境VS2013:2.例子:如创建的项目名称:TestAPP主要源文件建议路径:然后再右键TestAPP项目->属性->配置属性->C/C++->常规->附件包含目录,添加../include/具体第三目录然后再右键TestAPP项目->属性->配置属性->链接器->常规-&...原创 2018-02-28 11:25:08 · 2701 阅读 · 0 评论 -
C++得到函数执行所用时间
(本文章旨在个人回顾知识点)原创 2017-11-13 17:28:11 · 2640 阅读 · 0 评论 -
开机启动软件发现SLLOG日志不存在
(本文章旨在个人回顾知识点)原因:开机启动时,程序的执行目录不在程序所在的位置,导致找不到log文件。解决方法:在程序生产log文件之前设置程序执行目录为程序所在位置。备注:程序编码为Unicode编码。...原创 2017-11-30 11:58:21 · 2798 阅读 · 0 评论 -
win32获取本地ip
(本文章旨在个人回顾知识点)bool TestClass::GetLocalIP(char* ip){ //1.初始化wsa WSADATA wsaData; int ret = WSAStartup(MAKEWORD(2, 2), &wsaData); if (ret != 0) { return false; } //2.获取主机名 char hostname原创 2017-12-13 16:15:15 · 3540 阅读 · 0 评论 -
VS2013原本的win32升级为64位
(本文章旨在个人回顾知识点)一、32位系统与64系统区别32位系统的最大寻址空间是2^32也就是4G,也就是说如果你的电脑物理内存大于4G如果你安装了32位系统,最大也只能使用4G内存。而64系统的寻址空间应该来说是无穷大的(2^64).然而百度了一下(Windows 7 64系统中,家庭普通版能支持8GB内存,家庭高级版能支持16GB内存,而64位的专业版、企业版和旗原创 2017-12-15 09:50:11 · 5580 阅读 · 0 评论 -
windows线程创建
(本文章旨在个人回顾知识点)windows系统创建线程:(当然MFC、QT也有对应创建线程的接口函数)1、使用windows API CreateThread创建线程:(不建议使用该接口创建线程)具体原因:http://blog.csdn.net/hkwlg1314/article/details/494299252、使用_beginThread创建线程:①原创 2018-02-07 16:20:23 · 2687 阅读 · 0 评论 -
使用winsock2.h出现"sockadd":"struct"、“fd_set”:"struct"类型重定义错误。
在工程属性->C/C++->预编译器->预处理器定义中 加入 WIN32_LEAN_AND_MEAN即可。实际原因是windows.h 与winsock2.h的顺序问题原创 2017-06-28 10:00:58 · 2851 阅读 · 0 评论 -
QT对字符串简单加、解密
使用按位异或^进行加、解密:加、解密都是使用该函数:void EncryptionStr(QByteArray &data){ static QByteArray key = "MY_KEY"; for (int i = 0; i < data.size(); i++) { data[i] = data[i] ^ key[i % k...原创 2018-07-23 10:51:33 · 6216 阅读 · 0 评论 -
外观模式(C++实现)
(本博客旨在个人总结回顾)1、详情:外观模式:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层次接口,这个接口使得这一子系统更容易使用。说明:何时使用:①设计初期有意识的将不同的两个层分离。②开发阶段子系统因为不断重构演化而变的越来越复杂。③维护一个遗留的大型系统时,在这个系统以及非常难以维护和扩展,但开发需求又不得不使用它的时候。优点:使耦合性大大减低,...原创 2019-07-30 19:38:31 · 146 阅读 · 0 评论 -
职责链模式(C++实现)
(本博客旨在个人总结回顾)1、详情:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。说明:优点:①降低耦合度。它将请求的发送者和接收者解耦。②简化了对象。使得对象不需要知道链的结构。③增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新...原创 2019-08-02 15:41:52 · 242 阅读 · 0 评论 -
桥接模式(C++实现)
(本博客旨在个人总结回顾)1、详情:桥接模式:将抽象部分与它实现部分分离,使它们都可以独立地变化。说明:主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。关键代码:抽象类依赖实现类。优点:①抽象和实现的分离。...原创 2019-07-17 19:46:52 · 359 阅读 · 0 评论 -
适配器模式(C++实现)
(本博客旨在个人总结回顾)1、详情:适配器模式:将一个类接口转为换客户希望的另一个接口。Adapter模式使得由于接口不兼容的不能一起工作的那些类可以一起工作。使用场景:主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。说明:根据使用场景可以推断出适配器模式一般不是在软件设计初期设计的,而是在后期为了解决接口不兼容的情况,(不兼容可能第三方接口或者由于其他原因导...原创 2019-07-17 15:13:50 · 233 阅读 · 0 评论 -
抽象工厂模式(C++实现)
(本博客旨在个人总结回顾)1、详情:抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。角色:抽象工厂角色:这是抽象工厂模式的核心,它与应用程序无关。是具体工厂角色必须实现或继承的的父类。具体工厂角色:包含具体业务逻辑有关的代码。由应用程序调用来创建对应的具体产品对象。它由具体的类来实现。抽象产品角色:具体产品实现或继承的父类。具体产品角色...原创 2019-05-29 12:23:52 · 730 阅读 · 0 评论 -
设计模式之开放封闭原则
(本博客旨在个人总结回顾)1.概念:软件实体(类、模板、函数等等)应该可以扩展,但是不可修改。实例:(1)简单工厂模式违反了该原则,当新增类型类时需要添加工厂类中的case分支。简单工厂模式例子UML类图:(2)工厂模式遵循了该原则。当新增处理类型时,新增类继承对应的接口,保证了功能的扩展,原本的类也不会被修改。工厂模式例子UML类图:...原创 2018-08-14 23:31:32 · 2664 阅读 · 0 评论 -
ODB学习——入门(下载编译,运行其实例Hello)
1. 各个环境:1.1 ODB: 2.4.0 (32bit)1.2 visual stdio 2013 (32bit)1.3 SQL Server 2012 (32bit) 2. ODB资源下载下载地址:http://www.codesynthesis.com/products/odb/download.xhtml2.1 下载ODB Compiler: ...原创 2018-07-23 19:52:19 · 4732 阅读 · 1 评论 -
Windows下C++开机启动功能实现
#include <windows.h>//设置当前程序开机启动void AutoPowerOn(){ HKEY hKey; //std::string strRegPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; //1、找到系统的启动项 if (RegOpenKey...原创 2017-10-19 12:25:12 · 5980 阅读 · 6 评论