![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 57
爱学习的蓝调
每天进步一点点~做个有追求的程序员
展开
-
Linux 查看动态库和静态库的导出函数
在Linux下开发,使用及制作.so 和 .a 库文件时,经常要确认接口是否已成功导出,现给大家分享一点经验:命令nm [option(s)] [file(s)][haidongl@sj-haidongl ~]$ nm -hUsage: nm [option(s)] [file(s)] List symbols in [file(s)] (a.out by default). The options are: -a, --debug-syms Display deb原创 2021-11-03 17:01:32 · 1897 阅读 · 0 评论 -
UML类图
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)1.泛化(Generalization)【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种.【箭头指向】:带三角箭头的实线,箭头指向父类2.实现(Realization)【实现关系】:是一种类与接口的关系..转载 2021-10-13 16:09:27 · 480 阅读 · 0 评论 -
error C2039: ‘tr1‘: is not a member of ‘std‘
最近在VS2019的工程中集成gtest,发现报错如下:error C2039: 'tr1': is not a member of 'std'error C3083: 'tr1': the symbol to the left of a '::' must be a type原因:可能是C++11新特性导致解决方案:在CmakeLists文件中预定义_HAS_TR1_NAMESPACE 宏,通知编译器支持C++11add_compile_definitions(_..原创 2021-09-29 17:07:03 · 1482 阅读 · 0 评论 -
Cmake 设置 Debug / Release 版本
通过-DCMAKE_BUILD_TYPE= Debug or Release 控制Linux:mkdir Release cd Release cmake -DCMAKE_BUILD_TYPE=Release .. make mkdir Debug cd Debug cmake -DCMAKE_BUILD_TYPE=Debug .. make Windows:cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE.原创 2021-09-29 16:59:37 · 940 阅读 · 0 评论 -
C++.include ““与include <>
include是把目标文件拷贝过来,当作文本文件解析。include ""查找路径:当前目录->系统目录 如果是#include <*.h>,那么编译器是先从自带的函数库中寻找声明的头文件,例如iostream、math、stdio这种都是写成include <iostream>;include <>查找路径:系统目录->当前目录 如果是#include "*.h",那么编译器是先从自定义的路径中寻找,如果找不到则再去自带的函数...原创 2021-07-06 15:24:57 · 261 阅读 · 0 评论 -
char, unsigned char, signed char 区别
它们都是C++中字符的定义。char如果用于文本,则使用未加限定的char, 是类似于'a','0'的类型, 或是组成C字符串"abcde"的类型。它也可以是一个值,但是是当做无符号还是有符号数没有指定。signed char范围至少为 [-127 ~ 127] 。 (一般范围是 -128 到 127)unsigned char范围至少为 [0 ~ 255]说“至少”是因为C++标准只指定了对应每一种数据类型值的最小覆盖范围。如果你真的要表示小的整数,最好使...原创 2021-05-08 17:58:47 · 970 阅读 · 0 评论 -
size_t 定义及大小
C:size_t一般用来表示一种计数,比如有多少东西被拷贝等。sizeof操作符的结果类型是size_t,数组大小也是size_t类型。它在头文件中typedef为unsigned int类型,即typedef unsignedint size_t 该类型保证能容纳实现所建立的最大对象的字节大小。strncat,strncmp,strncpy等都用到了它。size_t 是为了方便系统之间的移植而定义的,在32位系统上定义为unsigned int,在64位系统上定义为un...原创 2021-05-08 17:43:51 · 3471 阅读 · 0 评论 -
C++ 设置控制台字体主题,颜色和背景颜色
通常控制台都是白字黑底的,千篇一律不免单调。适当的在控制台中加入一些彩色可以让人耳目一新,本文介绍如何使用系统API接口去修改控制台的文字和背景颜色。主要用到的函数有三个:// 设置主题SetConsoleTitle// 获取设备句柄GetStdHandle// 设置属性SetConsoleTextAttribute设置主题#include <iostream>#include <windows.h>using namespace std.原创 2021-04-08 17:17:59 · 9619 阅读 · 4 评论 -
vector的创建和初始化
C++的初始化方法很多,各种初始化方法有一些不同。(1): 默认初始化vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。vector<int> vec;(2): 拷贝初始化两种方式等价 ,vec2 初始化为 vec 的拷贝,vec必须与vec2 类型相同,也就是同为int的vector类型,vec2将具有和vec相同的容量和元素vector&原创 2021-01-13 09:18:20 · 1488 阅读 · 0 评论 -
C++产生随机整数和随机浮点数
头文件#include <cstdlib>#include <ctime>在产生随机数前,需要设置"seed"srand((unsigned)(time(0)));随机整数通用公式 a + rand() % n[a,b) 的随机整数(rand() % (b-a))+ a[a,b]的随机整数(rand() % (b-a+1))+ a;(a,b) 的随机整数(rand() % (b-a))+ a + 1;随机浮点数[0原创 2021-01-12 09:00:04 · 2469 阅读 · 0 评论 -
复杂度与Big-O标记
复杂度种类标记意义常量O(1)运行时间与元素个数无关对数O(log(n))运行时间随元素个数的增加呈对数增长线性O(n)运行时间随元素个数的增加呈线性增长n-log-nO(nlog(n))运行时间随元素个数的增加呈“线性与对数乘积”增长平方O(n^2)运行时间随元素个数的增加呈平方增长五种典型的复杂度Big-O标记种类标记1251050100100010000常量O(1)11111原创 2021-01-07 09:48:06 · 210 阅读 · 2 评论 -
C++标准库(第2版)读书笔记
持续更新ingC++11新特性Template表达式内的空格vector<vector> > vec; // Ok in each C++ versionvector<vector>> vec; // Ok since C++11nullptr_tC++11允许使用nullptr取代0或NULL,用来表示一个pointer,指向no value。它时一个新关键字 ,拥有类型为std::nullptr_t, 它被自动转换为各种pointer,但原创 2021-01-07 09:23:21 · 190 阅读 · 0 评论 -
最短路径--狄克斯特拉(Dijkstra)算法
最短路径从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径Dijkstra算法算法来源Dijkstra算法是由一个叫Dijkstra的荷兰人发明的,故称此算法为Dijkstra算法算法思想将图上的初始点看作一个集合S,其它点看作另一个集合 根据初始点,求出其它点到初始点的距离d[i] (若相邻,则d[i]为边权值;若不相邻,则d[i]为无限大) 选取最小的d[i](记为d[x]),并将此d[i]边对应的点(记为x)加入集合S(实际上,..原创 2020-07-20 17:05:58 · 2424 阅读 · 0 评论 -
揭秘编译和链接--C++
《程序员的自我修养--链接、装载与库》学习笔记对应平常的应用开发,我们很少关注编译和链接过程,这些事都被IDE替我们完成了。那我们写的代码,是怎么组织起来的?最后是怎么运行起来的呢?今天跟大家一起来学习下。代码编写完成到最后变成可执行的exe,中间需要四个步骤:预编译、编译、汇编和链接。 编译和链接图示: ...原创 2020-03-10 15:27:52 · 193 阅读 · 1 评论 -
char与wchar_t相互转换
1、wchar类型初始化wchar_t* wc = L"这是 wchar 测试";2、wchar_t* 转 char*char * wchar2char(const wchar_t* wchar ){ char * m_char; int len= WideCharToMultiByte( CP_ACP ,0,wchar ,wcslen( wchar ),...原创 2020-02-26 21:10:55 · 2214 阅读 · 0 评论 -
error C3872: "0xa0": 此字符不允许在标识符中使用
最近写代码过程中,从网上粘贴一段代码,编译时报以下错误 最终通过查询资料得以解决:问题原因:0xa0是十六进制数,换成十进制就是160,表示汉字的开始。解决方案:在报错的代码行检查两边的空格,用英文输入法的空格替换掉代码:char * wchar2char(const wchar_t* wchar ){char * m_ch...原创 2020-02-25 19:05:35 · 1444 阅读 · 0 评论 -
计算几何--线段求交
线段求交问题描述:已知两条线段P1P2P_1P_2P1P2和Q1Q2Q_1Q_2Q1Q2,判断P1P2P_1P_2P1P2和Q1Q2Q_1Q_2Q1Q2是否相交,若相交,求出交点。两条线段的位置关系可以分为三类:有重合部分、无重合部分但有交点、无交点。方法一step1:快速排斥实验设以线段P1P2P_1P_2P1P2为对角线的矩形为R,设以线段Q1Q2Q_1Q_2Q1...原创 2020-02-20 18:55:48 · 1501 阅读 · 0 评论 -
解析XML文件 C++
最近突然想尝试去解析XML文件,网上查阅了一些资料,最后选用了TinyXML库来解析,个人感觉还是很好用的,跟大家分享下一些心得和demo,希望能帮助到大家。TinyXML 介绍读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的...原创 2020-01-17 15:32:31 · 366 阅读 · 0 评论 -
vs 给qt程序添加图标
具体步骤1、创建图标文件 myapp.ico,放入项目文件夹下。如果是png或jpg格式,可以使用软件或在线转换成ico格式2、在项目文件夹下创建myapp.rc文件3、在文件内写入IDI_ICON1 ICON DISCARDABLE "myapp.ico"4、在解决方案资源管理器中,右键点击项目,添加myapp.rc5、重新生成解决方案步骤展示...原创 2019-12-23 09:46:12 · 1784 阅读 · 2 评论 -
VS2015内存泄漏检测、追踪
之前写了一篇VS2010内存泄漏检测和追踪的方法,最近在2015上发现不太适用(监听找不到msvcr140d.dll),现介绍一个适用2015的方法。内存泄漏定义内存泄漏指的是在程序里动态申请的内存在使用完后,没有进行释放,导致这部分内存没有被系统回收,久而久之,可能导致程序内存不断增大,系统内存不足内存泄漏危害系统可用内存越来越小 机器卡顿 系统崩溃 排查起来很困难定位方...原创 2019-12-11 09:17:04 · 2437 阅读 · 0 评论 -
VS2010内存泄漏检测、追踪
内存泄漏定义内存泄漏指的是在程序里动态申请的内存在使用完后,没有进行释放,导致这部分内存没有被系统回收,久而久之,可能导致程序内存不断增大,系统内存不足内存泄漏危害系统可用内存越来越小 机器卡顿 系统崩溃 排查起来很困难定位方法内存泄漏方法有很多种,也可以借助第三方插件 Visual Leak Detector(开源,免费)进行排查,本篇文章介绍一种借助Visual St...原创 2019-12-11 09:07:41 · 1327 阅读 · 0 评论 -
Jsoncpp 使用说明
Json介绍JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。通常用于数据交换或存储。JsonCpp是一个基于C++语言的开源库,用于C++程序的Json数据的读写操作。JsonCpp是一个开源库下载地址:https://github.com/open-source-parsers/jsoncpp文档地址:ht...原创 2019-10-16 11:25:59 · 1420 阅读 · 0 评论 -
C++设计模式--模板方法模式
策略模式(TemplateMethod Pattern)定义定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以再不改变一个算法的结构即可重新定义该算法的某些特定步骤。通过把不变的行为搬移到基类中,去除了子类的重复代码,提供了一个很好的代码复用解决方案。 AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了...原创 2019-04-16 09:09:17 · 200 阅读 · 0 评论 -
C++设计模式--观察者模式
策略模式(Observer Pattern)定义定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 ...原创 2019-04-17 15:45:42 · 151 阅读 · 0 评论 -
获取文件夹下所有文件 _findnext() 崩溃
最近在工作中,需要获取指定文件夹下的所有文件名,参考所查文件,写了个函数,在本地能成功。但编译打版,在服务器报错。最终调试发现,在win10中,使用文件遍历函数_findnext会报0xC0000005错误原因:_findnext()第一个参数”路径句柄”,返回的类型为intptr_t(long long),如果定义为long,在win7中是没有问题,但是在win10中...原创 2019-04-19 11:37:09 · 3406 阅读 · 8 评论 -
Effective C++学习笔记(一)
让自己习惯C++1.确定对象被使用前已先被初始化 类的构造函数的赋值初始化: 类的构造函数的列表初始化(更高效):构造/析构/赋值函数2.了解C++默默编写并调用哪些函数 如果自己没有声明,编译器就会为类声明一个default 构造函数,copy构造函数,一个copy assignment操作符和一个析构函数。 记住: C++不允许让reference指向不同的对象 C++...原创 2018-02-27 15:49:15 · 171 阅读 · 0 评论 -
查看dll导出函数
使用及制作DLL及LIB库文件时,经常要确认接口是否已成功导出,现给大家分享一点经验:1、进入Visual Studio 20XX命令提示符2、进入查看dll路径3、在命令行了输命令:dumpbin /exports dll文件名 ,即可得到DLL的接口4、如果要重定向输出至reslut.txt文本文件,则命令格式如下:dumpbin /exports xxx...原创 2019-04-12 15:13:46 · 2098 阅读 · 0 评论 -
C++设计模式--策略模式
策略模式(Strategy Pattern)定义定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 Context(环境角色):持有一个对 Strategy 的引用,最终给客户端调用。 IStrategy(抽象策略):定义了一个公共接口,让不同的算法以不同的方式来实现。通过这个接口,Context 可以调用不同的算法。 C...原创 2019-04-12 09:58:07 · 182 阅读 · 0 评论 -
C++设计模式--享元模式
桥接模式(Flyweight Pattern)定义运行共享技术有效地支持大量细粒度对象的复用。系统使用少量对象,而且这些都比较相似,状态变化小,可以实现对象的多次复用。常用场景系统中存在大量的相似对象 细粒度的对象都具有较接近的外部状态,而内部状态和环境无关。 需要缓冲池的场景优点是一个简单的模式,可以大大减少程序创建的对象,降低内存占用,增强性能缺点...原创 2019-03-26 09:12:34 · 405 阅读 · 0 评论 -
C++设计模式--组合模式
组合模式(Composite Pattern)定义将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性常用场景当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。 基本对象可以被组合成更复杂的组合对象,而这个组合对象...原创 2019-03-22 10:31:25 · 153 阅读 · 0 评论 -
《重构:改善既有代码的设计》读书笔记
重构原则1、重构的定义名词:Refactoring是对软件内部结构的一种调整,目的是在不改变外部行为的前提下,提高其可理解性,降低其修改成本; 动词:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。2、重构的好处改进软件的设计:时间长了,随便添加新功能,已经看不出原有的设计,难以维护; 使软件更容易理解:重构的过程也可以理解代码; 帮助找到bug:“我不是...原创 2018-02-27 15:03:28 · 321 阅读 · 0 评论 -
C++设计模式--迭代子模式
迭代子模式(Iterator Pattern)定义提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。 Iterator:迭代器定义访问和遍历元素的接口 ConcreteIterator:具体迭代器实现迭代器接口;对该聚合遍历时跟踪当前位置 Aggregate:聚合...原创 2019-05-10 09:47:52 · 1009 阅读 · 0 评论 -
C++设计模式--责任链模式
迭代子模式(Chain of ResponsibilityPattern)定义责任链模式主要用于处理请求,将处理请求的对象连成链,每个请求处理者都有着自己的处理权限.意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求直到有一个对象处理它为止。 Handl...原创 2019-05-14 09:08:22 · 376 阅读 · 0 评论 -
C++设计模式--解释器模式
解释器模式(Interpreter Pattern)定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 AbstractExpression(抽象表达式)...原创 2019-08-28 14:18:27 · 193 阅读 · 0 评论 -
C++设计模式--中介者模式
中介者模式(Mediator Pattern)定义用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 Mediator:中介者,它定义了一...原创 2019-08-16 08:56:11 · 361 阅读 · 0 评论 -
C++设计模式--访问者模式
访问者模式(Visitor Pattern)定义表示一个作用于某对象结构的各元素的操作。它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作常用场景一个对象结构包含很多类对象 需要对其中的对象进行很多不同的并且不相关的操作 对象很少改变,经常需要对其上的操作进行修改或新增优缺点优点:扩展性...原创 2019-07-19 10:01:31 · 130 阅读 · 0 评论 -
C++设计模式--状态模式
状态模式(State Pattern)定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先的状态 State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。 ConcreteState类,具体状态,每一个子类实现一个与Context的一个状...原创 2019-07-14 10:50:48 · 216 阅读 · 0 评论 -
C++/C++11中std::transform的使用
std::transform在指定的范围内应用于给定的操作,并将结果存储在指定的另一个范围内。要使用std::transform函数需要包含<algorithm>头文件。以下是std::transform的两个声明,一个是对应于一元操作,一个是对应于二元操作:template <class InputIterator, class OutputIterator, cla...原创 2019-07-16 08:42:46 · 2482 阅读 · 0 评论 -
static_cast与c风格的强制类型转换比较
最近在开发中,碰到指针类型转化时有时候会纠结与static_cast还是C类型强转,因此特定查了资料以及写代码验证了下,得出结论:应使用static_cast取代c风格的强制类型转换,较安全class A{ int a;};class B{ int b;};class C : public A{ int c;};int main(){ ...原创 2019-06-17 15:39:05 · 3931 阅读 · 0 评论 -
C++设计模式--备忘录模式
备忘录模式(Memento Pattern)定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先的状态 originator这个类是需要被保存状态的类; Memento该类的对象由originator创建,主要用来保存originator的内部状态。 Careataker负责在需要的...原创 2019-06-21 14:28:48 · 162 阅读 · 0 评论