自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 C++模板--基础篇

动机:模板的存在是为了消除重复代码,提高代码复用率的。 方案:根据给定类型生成所需函数。 函数模板 函数模板是C++模板机制中的yi

2020-02-29 15:03:16 64 0

原创 【C++17】新特性梳理

按照推荐度排序 if init表达式 C++17语言引入了一个新版本的if/switch语句形式,if (init; condition)和switch (init; condition),即可以在if和switch语句中直接对声明变量并初始化,如下: if (auto val = get...

2020-02-16 11:02:37 241 0

原创 移动语义move性能测试

动机:减少非必要的拷贝 实现思路: 1、必须要语法让我们在调用端告诉编译器,这是个Rvalue std::move可以实现 2、必须有语法让我们在被调用端写出一个专门处理Rvalue的函数,参考std::string的实现 std::move 将实参强制转换成了右值 测试代码: vo...

2019-12-28 14:38:27 125 1

原创 C++11 多线程编程--线程安全队列

1 std::thread类的构造函数是使用可变参数模板实现的,也就是说,可以传递任意个参数,第一个参数是线程的入口函数(可调用对象),而后面的若干个参数是该函数的参数。 2 std::mutex有两种操作:锁定(lock)与解锁(unlock)。 3 std::lock_guard在类的构造...

2019-08-18 21:41:10 273 0

原创 C++11 std::function和std::bind

1 可调用对象 不同类型可能有相同的调用形式,如: // 普通函数 int add(int a, int b) { return a + b; } // lambda表达式 auto mod = [](int a, int b) { return a % b; }; // 函数对象类 s...

2019-06-04 00:26:20 367 0

原创 Bridge桥模式

“单一职责”模式: 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同事充斥着重复代码,这时候的关键是划分责任。 动机 由于某些类型的固有的实现逻辑,使得它们具有两个纬度的变化,乃至多个纬度的变化。 如何应对这种"多维度的变化&qu...

2019-05-02 23:32:40 254 0

原创 使用Flask搭建简单的服务器

以用户注册为例子,我们需要向服务器/register传送用户名name和密码password。 from flask import Flask, request app = Flask(__name__) @app.route('/') def hello_world...

2019-02-03 02:27:11 1628 0

原创 C++读写XML--TinyXML

C++语言解析XML文件使用最广泛的库是TinyXML,TinyXML对应的官方文档如下: TinyXML官方文档:http://www.grinninglizard.com/tinyxmldocs/index.html TinyXML官方教程:http://www.grinningliza...

2019-01-20 10:22:18 200 0

原创 C++读写JSON--JsonCpp和RapidJSON

目前C++语言解析JSON文件,使用最多的两个库分别是JsonCpp和RapidJSON,这两个库对应的官方文档分别如下: 几乎所有用C++解析JSON的操作都可以在下面两个文档中查询到。 JsonCpp:https://en.wikibooks.org/wiki/JsonCpp Rapi...

2019-01-20 00:28:08 781 0

原创 链接总结

本文主要参考书目为《深入理解计算机系统》和《程序员的自我修养》      链接的主要内容就是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。链接的过程主要包括了地址和空间分配、符号决议和重定位等这些步骤。 ----《程序员的自我修养》     链接是将各种代码和数据片段收...

2018-12-30 15:09:47 180 0

原创 虚拟内存总结

本文主要参考《深入理解计算机系统》和《现代操作系统》两本经典书籍。  虚拟内存的基本思想:每个进程拥有自己的地址空间,这个空间被分割为多个块,每个块称作一页。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,...

2018-12-28 13:38:26 862 0

原创 C++11--智能指针详解及实现

本文主要参考: 1)《Effective Mordern C++》 2)《C++ Primer》 3)https://en.cppreference.com/w/cpp/memory/shared_ptr --可在线做实验测试代码 1、shared_ptr的实现原理 智能指针的一种通...

2018-09-10 10:51:17 1430 0

转载 C语言实现C++继承和多态

C++中的多态 我们知道的是在C++中会维护一张虚函数表,根据赋值兼容规则,我们知道父类的指针或者引用是可以指向子类对象的。如果一个父类的指针或者引用调用父类的虚函数则该父类的指针会在自己的虚函数表中查找自己的函数地址,如果该父类对象的指针或者引用指向的是子类的对象,而且该子类已经重写了父类的虚...

2018-08-23 14:08:54 163 0

原创 VC++使用pdb和dump恢复“案发现场”

目录   pdb文件 PDB文件简介  EXE、DLL等与pdb文件的匹配 编译器产生符号的过程 Release程序生成pdb文件  dump文件 使用背景介绍 dump文件的生成 调试dump文件 VS调试  本地dump调试 无源代码dump调试 WinDbg调试 ...

2018-08-06 14:15:06 1414 0

原创 《网络是怎样连接的》读书笔记

简介:本书是是一本不错的计算机网络入门书籍,能够对网络有一个全面的认识,力荐!! 不过,本书内容没有较深的理论,所以对于一些深入的问题,还需进一步阅读其他专业书籍。  下面是根据自己的理解整理的思维导图(点击放大),以及相关补充知识。  补充知识点 第1章 浏览器生成消息  1...

2018-08-01 12:57:12 564 1

原创 套接字编程入门

代码中使用到的API参见官网:https://docs.microsoft.com/zh-cn/windows/desktop/api/winsock2/ UDP套接字关键步骤:                  服务端                  客户...

2018-07-30 10:50:47 245 0

原创 Simple Factory Pattern--简单工厂模式

介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之一。但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导。动机:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。定义:简单...

2018-06-09 17:19:23 211 0

原创 Observer/Event观察者模式(C++)

动机: 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”--一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松...

2018-06-03 22:46:45 1513 1

原创 STL--allocator分配器

首先介绍一下执行new后的函数调用关系:new -> operator new -> malloc(CRT) -> 调用操作系统的内存分配API(Windows、Linux、Unix)介绍:std::allocator是STL容器使用的内存配置器,也是标准...

2018-06-03 15:48:33 473 0

原创 Template Method 模板方法

Template Method是一种组件协作模式:通过晚绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。动机:在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因而无法和任务的整体结构同时实现。如何在确定稳定操作结构的...

2018-06-02 11:01:01 549 0

原创 C++11 变参模板(variadic templates)

Variadic Template是C++11的一个很重要的特性;变体现在两个方面:(1)参数个数:利用参数个数逐一递减的特性,实现递归调用;(2)参数类型:参数个数逐一递减导致参数类型也逐一递减;两个注意点(1)递归调用(2)递归终止:使用重载的办法终止递归调用;举两个例子1.print函数//...

2018-05-26 11:52:12 1668 0

原创 C++模板特化

【理论待补充...】下面是一个函数模板特化的例子;/// 模版特化 template <class T> int compare(const T left, const T right) { std::cout << "in t...

2018-05-25 23:51:05 143 0

原创 C++11下的单例模式

动机:在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。  绕过常规的构造器,提供一种机制来保证一个类只有一个实例。 定义:保证一个类仅有一个实例,并提供一个该实例的全局访问点。 1、C++11中可以保证static变量时多线程...

2018-05-25 13:29:15 2846 1

原创 C++实现多项式曲线拟合--polyfit

基本原理:幂函数可逼近任意函数。上式中,N表示多项式阶数,实际应用中一般取3或5;假设N=5,则:共有6个未知数,仅需6个点即可求解;可表示为矩阵方程:Y的维数为[R*1],U的维数[R * 6],K的维数[6 * 1]。R> 6时,超定方程求解:下面是使用C++实现的多项式拟合的程...

2018-04-04 21:58:57 13711 4

翻译 命名约定--Google Style Guide

最重要的一致性规则是命名管理. 命名的风格能让我们在不需要去查找类型声明的条件下快速地了解某个名字代表的含义: 类型, 变量, 函数, 常量, 宏, 等等, 甚至. 我们大脑中的模式匹配引擎非常依赖这些命名规则.命名规则具有一定随意性, 但相比按个人喜好命名, 一致性更重要, 所以无论你认为它们是...

2018-02-27 11:55:51 287 0

原创 矩阵的遍历--按行、按列、蛇形

这里有一个假设:  在图像处理等领域中,二维矩阵已经按照行的方式存放在了一维数组mat中了。  矩阵的高记为height,宽记为width;  1.按行遍历 for (int i = 0; i < height; ++i) for (int j = 0; j...

2018-02-02 11:39:06 1488 0

原创 C++11--正则表达式

本文主要参考为《C++Primer第五版》  0.常用正则表达式 中文字符:[\u4e00-\u9fa5] 双字节字符(包括汉字在内):[^\x00-\xff] 空白符:\n\s*\r Email地址:[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&a...

2018-02-01 17:02:00 287 0

翻译 C++实现字符串分割--split string

本文主要参考自《Split a String》  在别的一些语言中,包括Python,C#等语言中,字符串的分割都提供了标准的函数,但是C++没有提供相关的函数。  举个例子,给定一个字符串str = "the quick brown fox" will be splitte...

2017-12-30 18:59:12 1340 0

原创 C++11--范围for语句

range-based for statementC++11新标准引入了一种简单的for循环,这种语句可以遍历容器或其他序列的所有元素。 从编译器的角度去理解范围for语句的执行过程;实际上就是把范围for语句转换成了传统的for循环语句。 下面的两种执行过程完全等价,只是采用了不同的标准函数。/...

2017-12-17 15:17:37 245 0

原创 C++11--Lambda表达式

《C++Primer》中对lambda表达式的解释如下:  lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。  微软官网对lambda表达式的解释如下:  1、捕获列表(capture list) Lambda函数可以引用在它之外声明的变量. 这些变量...

2017-12-16 23:23:28 195 0

原创 C++转换函数和隐式类类型转换

基础类型转换 基础类型转为类类型 类类型转换为基础类型

2017-12-14 21:37:57 512 0

原创 C++基于对象--Class with pointer--string类的简单实现

本文所谈的对象是带有指针的类(Class with pointer);这时不能使用编译器自动合成的三大函数(Big three):拷贝构造、拷贝赋值和析构。需要自己去显式的定义着三大函数; primer中给出的建议是:如果一个类需要需要自定义析构函数,几乎可以肯定它也需要自定义拷贝赋值运算符和拷...

2017-12-08 22:33:18 353 0

原创 C++基于对象--Class without pointer--complex的简单实现

要注意培养正规的、大气的编程习惯。   1、基于对象(Object Based):面向单一class的设计。     class有两种经典的分类:     一种不带有指针     另一种带有指针   2、面向对象(Object Oriented):面对的是多重classes的设计,c...

2017-12-07 09:12:42 198 0

原创 C++使用标准库--文本查询程序

题目:在给定文件中查询单词。查询结果是单词在文件中出现的次数及所在行的列表。如果一个单词在一行中多次出现,此行只显示一次,行会按照升序输出。 效果如下: 在此程序的实现中使用到的标准库内容包括: (1)ifstream:用来绑定并打开指定的文本。 (2)vector:用来保存整个文本,每行保存...

2017-12-02 21:48:36 557 0

原创 C++STL--map和set 词频统计和单词转换

set简介 set官方参考连接:http://www.cplusplus.com/reference/set/set/ 1.set是按特定顺序存储的容器,元素值唯一。  2.set中的元素是const类型的,不能被修改,但是可以执行插入(insert)和删除(erase)。  3.set的...

2017-11-30 11:01:13 721 0

原创 C++IO库--fstream和stringstream

注意:IO对象无拷贝或赋值,需要以引用的方式传递参数和返回流。 istringstream和ifstream的使用 (1)使用ifstream从文件中读取文本,一行为一个元素存入vector<string>中; (2)使用istringstream从vector<string...

2017-11-30 10:50:03 582 0

原创 OpenCV—漫水填充floodFill之区域信息统计

本文的主要参考为 1、官方文档OpenCV249-floodFill 2、《Learning OpenCV 3》page361-364 OpenCV中提供的直线拟合API如下: floodFill(InputOutputArray image, Point seedPoint, Scalar n...

2017-10-28 23:25:53 1530 0

原创 OpenCV—直线拟合fitLine

本文的主要参考为官方文档OpenCV249-fitLine和博客-OpenCV 学习(直线拟合) 以及《Learning OpenCV 3》page425-426 OpenCV中提供的直线拟合API如下: void fitLine(InputArray points, OutputArray...

2017-10-27 15:18:02 6924 0

原创 OpenCV—椭圆拟合fitEllipse

本文的主要参考为官方文档OpenCV249-fitEllipse和博客-opencv中的椭圆拟合 以及《Learning OpenCV 3》page424-425 OpenCV中提供的椭圆拟合API如下: RotatedRect fitEllipse(InputArray points)输入...

2017-10-26 21:32:09 27166 5

原创 OpenCV—连通域分析connectedComponentsWithStats()

下文主要内容来自《Learning OpenCV 3》page417-419和官方文档  在OpenCV 3中提供了两个很好的函数,在OpenCV 2中没有。  (1) cv::connectedComponents() (2) cv::connectedComponentsWithStats...

2017-10-26 20:26:36 24696 3

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