自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

思考思考再思考

把你会的写出来!

  • 博客(39)
  • 收藏
  • 关注

原创 如何开启python编程?

按照这篇文章的步骤,手动操作一遍,你应该就能开始用python了。

2022-02-20 17:10:42 1860

原创 二叉查找树BST基本操作(二)

二叉树删除操作

2022-02-14 10:22:27 706

原创 二叉查找树BST基本操作(一)

二叉查找树基本操作一

2022-01-27 14:35:10 1039

原创 VS开发中,常见编译问题解决方案

01 无法打开源文件 “xxxx.h”

2020-11-20 13:47:53 1036 2

原创 自我反思:为什么定下的目标总是很难实现

一转眼,再过三个月,2020年也要结束了。年初给自己定下的目标:读完6本书。现在回头一望,才勉强读完两本。时间总是在过后显得飞快,意思是:站在5年后的今天,回想5年前的自己,发现一点改变都没有,想读的书没读完,想学的技能终究没学会。时间真的很快,“唰”的一声,5年就没了。同样,若未来的日子仍旧像现在这样过,5年后也会“唰”的一声就到来。问题在哪?为什么定小的这些小目标总是很难完成?目标很大吗?不是,目标并不艰难,才读完6本书而已,还是用一年的时间。没时间吗?其实也不是,毕竟有的时候自己无聊到一直躺

2020-09-14 17:30:26 516

原创 朴素贝叶斯分类器简述

基本原理本文基于《机器学习实战》第四章:基于概率论的分类方法–朴素贝叶斯。目标: 给定一条文本(text):“my dog has flea”,判断此文本是侮辱性的(Abusive)还是非侮辱性的(Non-Abusive)。书中使用朴素贝叶斯进行分类:01 先用已知样本训练贝叶斯分类器。假定现在只有c0c_0c0​和c1c_1c1​两类text,且每类text都包含f0f_0f0​…fnf_nfn​种特征,则很容易统计出每个类对应的各个特征的概率,即p(fi∣c0)p(f_i|c_0)p(fi​∣

2020-08-27 14:40:55 379

原创 C++控制台输出16进制

如何在控制台程序中输出16进制? char data[6] = { 0x0A,0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; for (int i = 0; i < 6; i++) { cout << setfill('0') << setw(2); cout << setiosflags(ios::uppercase) << hex << (unsigned int)(data[i]) << " "

2020-08-14 11:53:40 724

原创 如何在局域网下建立共享文件夹?

本文阐述的是有线连接的情形下,无线条件暂未测试。简单理解局域网:所有人的电脑的网线都连接在一个路由器上。一般情况下,同一办公室的人电脑会在一个局域网下,两台电脑直接网上连接也能构成一个小的局域网。应用场景:例如每天都有人拿着U盘在你那里拷贝文件,那这个时候你可以直接建个共享文件夹,将文件放入其中,自取就好了。省去了找U盘,借U盘,插拔U盘等等琐碎的操作。下面将以两台电脑直连的方式进行配置说明。共享者电脑A:提供共享文件夹DATA。访问者电脑B:访问电脑A提供的共享文件夹DATA。且两电脑系统都为

2020-07-15 19:54:57 1517

原创 C++ map容器使用总结

01 如何更改已有key的value值1、填充容器方式一:以初值列的形式传进去 std::map<int, float> vmap; vmap.insert({1, 2.0}); vmap.insert({2, 3.0});方式二:pair<> std::map<int, float> vmap; vmap.nisert(std::pair<int, float>(1, 2.0)); vmap.nisert(std::pair<int

2020-07-14 13:41:35 330

原创 如何在类的内部创建线程并安全退出

注意两个问题:1、线程创建之后,很多人的写法是直接一个while死循环让程序空转,这样效率低并且浪费资源;2、当类析构的时候,一定要让线程正常退出。ExitTHread.h #pragma once #include <iostream> #include <mutex> #include <future> #include <thread> #include <windows.h> using namespace std;

2020-07-07 14:35:12 258

原创 可用于缓存大量数据的模板类

2020年5月21日上一篇怎样说到下图所示的处理数据的流程,我给出了Sensor类的实现。那么这个类是针对线阵相机的数据结构实现的,如果我现在换成3D相机又该怎么操作,我发现只要更换数据结构体就行,其他都可以不用动。再进一步思考,这个模型适用的情形总可以是“一头高频次的出数据,另一头不断地处理数据”。那我完全可以将这一套逻辑封装成一个模板类。template<typename D>class proSensor{ ......}可以将D换成任何类型的数据。 #pragma

2020-05-22 17:33:19 213

原创 处理大量数据的一种方法(C++)

处理场景:三台线阵相机或者多台其他传感器与工控机连着,通过调用相机的SDK控制相机,例如同时开关,同时从相机中获取数据。然后采集软件接收到相机数据后,将数据保存到硬盘。处理的问题:如果三台相机发送数据频率很快,并且数据量很大的话,如何快速将数据写入到硬盘里或者对数据的其他处理,从而保证内存不增长?解决方案简述:每收到一坨相机的数据,就将其从尾部压入队列;同时有另外一个线程在等着处理这个队列,只要这个队列有数据,就从头部弹出一个数据,然后对这个数据进行相应的处理。这里存在一个问题:如果相机频率太.

2020-05-20 20:01:01 3342 1

原创 如何优雅地退出线程?

文章是对于《C++高级编程(第4版)》第570页中的《多线程的Logger类》代码解析。具体代码在文章最后,读者可自行拷贝,研读代码。从代码中可以看出,作者在析构函数中增加了mExit的赋值使得线程能够在类对象释放之前退出。现在mMutex上获得一个锁,然后使用条件变量notify_all。首先需要获得一个锁,即mMutex必须释放成功才能给mExit赋值为true。即在如下线程函数代码中,mQueue处理完成才会释放锁。就不会出现mQueue还未处理完成,马上就执行if(mE.

2020-05-13 15:48:59 1215

原创 D56.1.0 《并发编程实战》读书笔记01

01 为什么使用并发?为了划分关注点而使用并发通过将相关代码放在一起并将无关的代码分开,这种方法可以是你的程序更容易理解和测试,从而减少出错的可能性。你可以使用并发来分隔不同的功能区域,即使在这些不同功能区域的操作需要在同一时刻发生的情况下。如果不显示地使用并发,你要么被迫编写任务切换框架,要么在操作中主动调用不相关的代码。例如为台式计算机提供的DVD播放程序。这样一个程序基本上具备...

2019-09-24 20:07:05 154

原创 D50.1.0 如何使用OpenGL绘制三维坐标系

如何在屏幕左下角绘制直角坐标系?第一步,指定屏幕绘制区域 第二步,设定投影效果、观察坐标及旋转缩放等 第三步,绘制坐标轴,绘制箭头 第四步,添加“xyz”字符​​第一,图中圆环所在的指定区域与坐标轴所在的区域是两个相互独立的空间,通过使用glViewport函数限定。glViewport(0,0,500,500);//指定圆环绘制空间,从(0,0)位置开始,长宽...

2019-07-31 16:13:13 2837 5

原创 D49.1.0 对gluLookAt,gluPerspective和glOrtho的理解(完善篇)

这篇文章是对《D19.1.0 对gluLookAt,gluPerspective和glOrtho的理解》的部分更正和完善。01 gluLookAt假定现在手上有一台单反,你可以拿着单反拍正前方,可以仰起头拍天空,还可以拿相机拍地面,相机如何拍摄对应的是gluLookAt函数。gluLookAt功能演示:​从正前方看 斜向下45°看 从正上方看​理解gluLookAt之前,先概述O...

2019-07-29 22:01:49 602

转载 D46.1.0 OpenGL坐标系统

01 坐标裁剪窗口是以像素为单位进行度量的。开始在窗口中绘制点、线和形状之前,必须告诉OpenGL如何把指定的坐标对翻译为屏幕坐标。我们可以通过指定占据窗口的笛卡尔空间区域完成这个任务,这个区域成为裁剪区域。在二维空间中,裁剪区域就是窗口内部最小和最大的x和y值。下图为两种常见的裁剪区域:​02 视口:把绘图坐标映射到窗口坐标裁剪区域的高度和宽度很少正好与窗口的高度和宽度(以...

2019-07-23 21:56:58 181

转载 D45.1.0 尽量用const enum inline 替换 #define

01 使用const替换#define通常,我们很习惯在程序起始位置写出#define ASPECT_RATIO 1.653的语句。这样的定义往往会有如下隐患: ASPECT_RATIO从未被编译器看见,可能在编译器开始处理源码之前就被预处理器移走了。名称ASPECT_RATIO可能没进入记号表内,于是会出现变异错误的信息。 当ASPECT_RATIO定义在一个非我们缩写的...

2019-07-17 21:23:19 157

原创 D41.1.1 const和指针的应用

原理书上看到这样一节代码:int gorp = 10;int sloth = 3;const int *ps = &sloth;//a pointer to const intint * const finger = &sloth;//a const pointer to int注意注释中的英文部分:指向常整型的指针和指向整型的常量指针。写代码过程中”c...

2019-07-08 15:59:29 153

转载 D40.1.0 为什么读技术书籍总是“从入门到放弃”?

这篇文章是李笑来《自学是门手艺》的读书笔记,书中的一个章节是关于“如何从容应对含有过多 “过早引用” 的知识?”注:文章中引用部分都是摘自李笑来《自学是门手艺》一书。进而想到,为什么读编程书籍会如此痛苦,以致于现在靠“C++吃饭”的我还是没认真读完一本C++编程书籍?同样,为什么总是这么多人“21天,从入门到放弃了?”我认为最大的障碍就是文章中提到的“过早引用”,是过早引用让我们读...

2019-07-08 09:28:38 279

转载 D37.1.0 读写文件

在相机采集程序中,通常需要将相机采集的图像数据和此时的图像高宽时间戳之类的存储下来。而所有数据在计算机内部都是用二进制表示的,所以可以将这些数据存储为二进制文件:DAT和IDX类型。DAT文件类型主要是“数据”文件。可以是任何内容,比如:文字,图形,视频或一般的二进制数据,它并没有统一具体的结构。IDX文件用来存放某一条数据在对应的dat文件中的位置信息。Dat文件格式如下:文件头:8...

2019-07-01 21:32:19 166

转载 D33.1.0 取得项目的Git仓库的两种方法

最好的方法只有一个:读官方文档。http://git-scm.com/book/zh/v2第二好的方法就是:看我亲测有效的总结。哈哈,言归正传——取得Git项目的仓库有两种方法。第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库。第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来。第一种方式:导入所有文件1、先新建一个文件夹(test1)2、打开Git ...

2019-06-24 21:29:48 167

原创 D31.1.0 采集端如何测试

花了一年时间积攒的技术知识和经验可能就只有短短几百字。自己也觉得这样的效率太低了。采集端程序编写算是我的第一个真正有所收获的任务,最开始以为把别人的SDK封装一遍,开放几个接口就可以了;到后面进入到连调阶段发现我把问题想得太简单了,然后程序改了一遍又一遍,围绕的问题只有下面三个小点,这是暂时遇到的未考虑到的问题,以后可能还有。测试发送频率与接收频率采集端最主要的一个目的,就是把设备比如相...

2019-06-17 22:24:25 177

原创 D26.1.0 复制构造函数和拷贝赋值操作符

这是《Effective C++》中条款12的读书笔记。copy构造函数和copy assignment操作符,称为copying函数。通常情况下编译器有默认的构造函数和赋值操作符,这两个函数都可以将被拷对象的所有成员变量做一份拷贝。但是当程序员声明自己的copying函数的时候,编译器不再做默认的拷贝操作。例如下面一个Customer类:class Customer{pu...

2019-06-05 15:53:53 221

原创 D24.1.0 接口继承和实现继承

先给出一个类的定义:class Shape{public: virtual void draw() const = 0;//纯虚(pure virtual)函数 virtual void error(const std::string& msg);//虚(impure virtual)函数 int objectID() const;//普通函数 ...

2019-06-03 14:25:12 171

原创 D21.1.0 C++,从未开启你的大门

这不是一篇纯技术文章,文末有煽情。先解决技术问题。在项目中我开发后端采集程序。项目开始,我使用的红外相机类型是CX320,后来因为某些原因不得不换同一个牌子的其他类型相机CG640。这两款相机使用的SDK是一样的,但是两款相机使用的具体函数不一样。这两个相机有两点不一样: 采集的图片大小不一样,一个是320*240,一个是640*480; 采集红外数据的具体函数不一样...

2019-05-30 10:32:40 133

原创 D19.1.0 对gluLookAt,gluPerspective和glOrtho的理解

今天介绍对三个函数gluLookAt,gluPerspective和glOrtho的理解。先说这两个函数有什么用,再解释怎么用,然后再说说他两有啥关系。有什么用01 gluLookAtgluLookAt体现的是你怎么看,这个函数可以让物体看起来放大了或者缩小了,也可以让x轴朝上,y轴朝上或者z轴朝上。​opengl默认的坐标系是,水平方向向右为x轴正向,竖直向上为y轴正向,由...

2019-05-26 22:51:24 1107

原创 D15.1.0 安全封装函数接口的一个小技巧

假设我们有一个表现日期的类的构造函数:class Data{public: Data(int month, int day, int year); ……};Data d(5, 21, 2019);这样写好像没任何问题,2019年5月12日。因为这函数使我们自己设计的,我们很清楚该怎么调用。可以这个接口开放给其他人,可能就会冒出以下两种错误: 错误的...

2019-05-21 16:19:27 222

原创 D14.1.0 编程经验总结

C++中的mutex(互斥锁)使用在做相机采集的时候,往往会用到底层的触发函数,在这个函数里面实现将采集到的相机数据发送出去。并且通常这个函数通常是一个线程。之前犯的错误是这样:认为凡是用到了线程,就得加上mutex(互斥锁)。由此可能造成线程的堵塞,造成效率低下。UINT WINAPI SocketThreadProc(LPVOID pParam){ Cox320IRC...

2019-05-20 16:23:57 156

原创 D13.1.0 如何封装一个类 C接口版

接上一篇《如何封装一个类 C++接口版》,今天写如何以C语言形式开放一个类的接口。C++接口版本地址:https://blog.csdn.net/WOODS_CTBU/article/details/90106258。上一篇我写到我不想把我的实现文件.cpp提供给别人,我也不想让别人看到我定义的私有成员和我调用了哪家的SDK开发我的程序。我只想给别人开放该看到的东西。用C++的方式...

2019-05-18 20:15:10 361

原创 D12.1.0 如何在MFC中使用OpenGL实现图形旋转,缩放和移动?

01函数解释void glTranslatef(GLfloat x,GLfloat y,GLfloat z);函数功能:沿X轴正方向平移x个单位(x是有符号数),沿Y轴正方向平移y个单位(y是有符号数),沿Z轴正方向平移z个单位(z是有符号数)。void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z);先解释一...

2019-05-17 15:56:18 872

原创 D9.1.0 如何在MFC中设定OpenGL的渲染环境

本文大部分内容摘自:https://blog.csdn.net/MissXy_/article/details/75671515,作者是:MissXy_。在控制台程序中使用opengl画图并显示可以非常方便,opengl自带窗口显示功能。现在我想在MFC中使用opengl画图,那如何让OpenGL画出的图形在MFC的视类窗口显示出来呢?Windows GDI是通过设备句柄(Device ...

2019-05-14 21:29:28 292

原创 如何封装一个类 C++接口版

先描述题目要表达的意思:我现在需要基于别人给的SDK,开发我自己的程序。例如基于别人给的miniBird.h、miniBird.lib和miniBird.dll,我自己写了一个类叫Bird,并且我开发的这个类也是需要给别人使用的,所以我也要提供Bird.h、Bird.lib和Bird.dll这三个文件给别人调用。我肯定不想把我的实现文件.cpp提供给别人,我也不想让别人看到我定义的私有程序和其...

2019-05-11 10:06:38 2470 2

原创 使用抽象类开放接口的原理

此文的大部分内容摘自https://blog.51cto.com/billhoo/1650506,作者是Alex Blekhman。普通的导入导出C++类的方式都是使用_declspec(dllexport)/_declspec(dllimport)来导入导出类。使用只有纯虚函数的抽象类之所以不需要导出,是因为纯虚函数自带虚函数表。先定义一个纯虚函数类:// The abstr...

2019-05-11 10:04:08 181

原创 D7.2.0 自由不等于免费

这是薛兆丰北大经济学课第55讲《自由不等于免费》的读书笔记。文章开头讲到一个例子,一群中学生在某购物中心就抗议联合国的一个决议征集顾客的签名。但是购物中心是人们购物娱乐的地方,学生却拿来征集签名,弄得整个购物中心乌烟瘴气的,于是购物中心觉得这帮学生侵犯了顾客安静购物的权利,就对这帮学生提起了诉讼。学生发表抗议,行使的是言论自由的权利;学生在商场做这个活动,占用了场地,购物中心的一些设施,...

2019-05-11 10:00:40 492

原创 VS开发过程中,“无法打开源文件 xxxx.h”问题的解决方法?

问题出现的原因只有一个: 你没有把相关的.h文件包含到你的工程中,不管你使用的是绝对路径还是相对路径。很多人的问题可能是路径很明确的包含进去了,可还是出现了“无法打开源文件”,为何?那是因为你的编译平台选错了,例如你建立了一个x86的项目,但是说选择包含路径的时候确实默认的x64平台。如下图:解决办法是: 如果使用的是x86那么弹出的属性页中就选择win32,再把相关的.h或者.li...

2018-12-19 16:53:20 24576 9

原创 最大似然用于线性回归的公式推导

必要知识高斯分布定义假设随机变量X服从高斯分布,记作X∼N(μ,σ2)X\sim N(\mu, \sigma^2)X∼N(μ,σ2)。概率密度函数为:f(x)=12πσ2e−(x−μ)22σ2 f(x) = \frac {1} {\sqrt{2\pi \sigma^2}}e^{- \frac{(x-\mu)^2}{2\sigma^2}}f(x)=2πσ2​1​e−2σ2(x−μ)2​用最大...

2018-09-18 18:05:15 1101 1

转载 Markdown自带文档

自带文档欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown...

2018-09-18 17:32:08 441

原创 从《大话设计模式》理解到的……

将《大话设计模式》里边的代码全部模仿一遍,希望能够深刻理解面向对象之精华!

2016-01-09 17:06:30 404

空空如也

空空如也

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

TA关注的人

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