<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[思考思考再思考]]></title><description><![CDATA[把你会的写出来!]]></description><link>https://blog.csdn.net/WOODS_CTBU</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; WOODS_CTBU]]></copyright><item><title><![CDATA[如何开启python编程？]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/123032907</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/123032907</guid><author>WOODS_CTBU</author><pubDate>Sun, 20 Feb 2022 17:10:42 +0800</pubDate><description><![CDATA[按照这篇文章的步骤，手动操作一遍，你应该就能开始用python了。]]></description><category></category></item><item><title><![CDATA[二叉查找树BST基本操作（二）]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/122919162</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/122919162</guid><author>WOODS_CTBU</author><pubDate>Mon, 14 Feb 2022 10:22:27 +0800</pubDate><description><![CDATA[二叉树删除操作]]></description><category></category></item><item><title><![CDATA[二叉查找树BST基本操作（一）]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/122717180</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/122717180</guid><author>WOODS_CTBU</author><pubDate>Thu, 27 Jan 2022 14:35:10 +0800</pubDate><description><![CDATA[二叉查找树基本操作一]]></description><category></category></item><item><title><![CDATA[VS开发中，常见编译问题解决方案]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/109846483</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/109846483</guid><author>WOODS_CTBU</author><pubDate>Fri, 20 Nov 2020 13:47:53 +0800</pubDate><description><![CDATA[01 无法打开源文件 “xxxx.h”]]></description><category></category></item><item><title><![CDATA[自我反思：为什么定下的目标总是很难实现]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/108583728</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/108583728</guid><author>WOODS_CTBU</author><pubDate>Mon, 14 Sep 2020 17:30:26 +0800</pubDate><description><![CDATA[一转眼，再过三个月，2020年也要结束了。年初给自己定下的目标：读完6本书。现在回头一望，才勉强读完两本。时间总是在过后显得飞快，意思是：

站在5年后的今天，回想5年前的自己，发现一点改变都没有，想读的书没读完，想学的技能终究没学会。时间真的很快，“唰”的一声，5年就没了。同样，若未来的日子仍旧像现在这样过，5年后也会“唰”的一声就到来。

问题在哪？为什么定小的这些小目标总是很难完成？
目标很大吗？不是，目标并不艰难，才读完6本书而已，还是用一年的时间。没时间吗？其实也不是，毕竟有的时候自己无聊到一直躺]]></description><category></category></item><item><title><![CDATA[朴素贝叶斯分类器简述]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/108260416</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/108260416</guid><author>WOODS_CTBU</author><pubDate>Thu, 27 Aug 2020 14:40:55 +0800</pubDate><description><![CDATA[基本原理
本文基于《机器学习实战》第四章：基于概率论的分类方法–朴素贝叶斯。
目标： 给定一条文本（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​∣]]></description><category></category></item><item><title><![CDATA[C++控制台输出16进制]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/108000229</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/108000229</guid><author>WOODS_CTBU</author><pubDate>Fri, 14 Aug 2020 11:53:40 +0800</pubDate><description><![CDATA[如何在控制台程序中输出16进制？
	char data[6] = { 0x0A,0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
	for (int i = 0; i &lt; 6; i++)
	{
		cout &lt;&lt; setfill('0') &lt;&lt; setw(2);
		cout &lt;&lt; setiosflags(ios::uppercase) &lt;&lt; hex &lt;&lt; (unsigned int)(data[i]) &lt;&lt; " "]]></description><category></category></item><item><title><![CDATA[如何在局域网下建立共享文件夹？]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/107369085</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/107369085</guid><author>WOODS_CTBU</author><pubDate>Wed, 15 Jul 2020 19:54:57 +0800</pubDate><description><![CDATA[本文阐述的是有线连接的情形下，无线条件暂未测试。
简单理解局域网：所有人的电脑的网线都连接在一个路由器上。一般情况下，同一办公室的人电脑会在一个局域网下，两台电脑直接网上连接也能构成一个小的局域网。
应用场景：例如每天都有人拿着U盘在你那里拷贝文件，那这个时候你可以直接建个共享文件夹，将文件放入其中，自取就好了。省去了找U盘，借U盘，插拔U盘等等琐碎的操作。
下面将以两台电脑直连的方式进行配置说明。
共享者电脑A：提供共享文件夹DATA。
访问者电脑B：访问电脑A提供的共享文件夹DATA。
且两电脑系统都为]]></description><category></category></item><item><title><![CDATA[C++ map容器使用总结]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/107336383</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/107336383</guid><author>WOODS_CTBU</author><pubDate>Tue, 14 Jul 2020 13:41:35 +0800</pubDate><description><![CDATA[01 如何更改已有key的value值
1、填充容器
方式一：以初值列的形式传进去
	std::map&lt;int, float&gt; vmap;
	vmap.insert({1, 2.0});
	vmap.insert({2, 3.0});

方式二：pair&lt;&gt;
	std::map&lt;int, float&gt; vmap;
	vmap.nisert(std::pair&lt;int, float&gt;(1, 2.0));
	vmap.nisert(std::pair&lt;int]]></description><category></category></item><item><title><![CDATA[如何在类的内部创建线程并安全退出]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/107180868</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/107180868</guid><author>WOODS_CTBU</author><pubDate>Tue, 07 Jul 2020 14:35:12 +0800</pubDate><description><![CDATA[注意两个问题:
1、线程创建之后，很多人的写法是直接一个while死循环让程序空转，这样效率低并且浪费资源；
2、当类析构的时候，一定要让线程正常退出。
ExitTHread.h

	#pragma once
	#include &lt;iostream&gt;
	#include &lt;mutex&gt;
	#include &lt;future&gt;
	#include &lt;thread&gt;
	#include &lt;windows.h&gt;
	using namespace std;
]]></description><category></category></item><item><title><![CDATA[可用于缓存大量数据的模板类]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/106287802</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/106287802</guid><author>WOODS_CTBU</author><pubDate>Fri, 22 May 2020 17:33:19 +0800</pubDate><description><![CDATA[2020年5月21日
上一篇怎样说到下图所示的处理数据的流程，我给出了Sensor类的实现。那么这个类是针对线阵相机的数据结构实现的，如果我现在换成3D相机又该怎么操作，我发现只要更换数据结构体就行，其他都可以不用动。再进一步思考，这个模型适用的情形总可以是“一头高频次的出数据，另一头不断地处理数据”。那我完全可以将这一套逻辑封装成一个模板类。

template&lt;typename D&gt;
class proSensor
{
   ......
}

可以将D换成任何类型的数据。
	#pragma]]></description><category></category></item><item><title><![CDATA[处理大量数据的一种方法(C++)]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/106242809</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/106242809</guid><author>WOODS_CTBU</author><pubDate>Wed, 20 May 2020 20:01:01 +0800</pubDate><description><![CDATA[处理场景：三台线阵相机或者多台其他传感器与工控机连着，通过调用相机的SDK控制相机，例如同时开关，同时从相机中获取数据。然后采集软件接收到相机数据后，将数据保存到硬盘。



处理的问题：如果三台相机发送数据频率很快，并且数据量很大的话，如何快速将数据写入到硬盘里或者对数据的其他处理，从而保证内存不增长？

解决方案简述：每收到一坨相机的数据，就将其从尾部压入队列；同时有另外一个线程在等着处理这个队列，只要这个队列有数据，就从头部弹出一个数据，然后对这个数据进行相应的处理。这里存在一个问题：如果相机频率太.]]></description><category></category></item><item><title><![CDATA[如何优雅地退出线程？]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/106099872</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/106099872</guid><author>WOODS_CTBU</author><pubDate>Wed, 13 May 2020 15:48:59 +0800</pubDate><description><![CDATA[文章是对于《C++高级编程(第4版)》第570页中的《多线程的Logger类》代码解析。

具体代码在文章最后，读者可自行拷贝，研读代码。

从代码中可以看出，作者在析构函数中增加了mExit的赋值使得线程能够在类对象释放之前退出。







现在mMutex上获得一个锁，然后使用条件变量notify_all。

首先需要获得一个锁，即mMutex必须释放成功才能给mExit赋值为true。即在如下线程函数代码中，mQueue处理完成才会释放锁。就不会出现mQueue还未处理完成，马上就执行if(mE.]]></description><category></category></item><item><title><![CDATA[D56.1.0 《并发编程实战》读书笔记01]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/101309500</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/101309500</guid><author>WOODS_CTBU</author><pubDate>Tue, 24 Sep 2019 20:07:05 +0800</pubDate><description><![CDATA[01 为什么使用并发？

为了划分关注点而使用并发

通过将相关代码放在一起并将无关的代码分开，这种方法可以是你的程序更容易理解和测试，从而减少出错的可能性。你可以使用并发来分隔不同的功能区域，即使在这些不同功能区域的操作需要在同一时刻发生的情况下。如果不显示地使用并发，你要么被迫编写任务切换框架，要么在操作中主动调用不相关的代码。

例如为台式计算机提供的DVD播放程序。这样一个程序基本上具备...]]></description><category></category></item><item><title><![CDATA[D50.1.0 如何使用OpenGL绘制三维坐标系]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/97927466</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/97927466</guid><author>WOODS_CTBU</author><pubDate>Wed, 31 Jul 2019 16:13:13 +0800</pubDate><description><![CDATA[如何在屏幕左下角绘制直角坐标系？

第一步，指定屏幕绘制区域
	第二步，设定投影效果、观察坐标及旋转缩放等
	第三步，绘制坐标轴，绘制箭头
	第四步，添加“xyz”字符
​



​



第一，图中圆环所在的指定区域与坐标轴所在的区域是两个相互独立的空间，通过使用glViewport函数限定。


glViewport(0,0,500,500);//指定圆环绘制空间，从(0,0)位置开始，长宽...]]></description><category></category></item><item><title><![CDATA[D49.1.0 对gluLookAt，gluPerspective和glOrtho的理解（完善篇）]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/97686474</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/97686474</guid><author>WOODS_CTBU</author><pubDate>Mon, 29 Jul 2019 22:01:49 +0800</pubDate><description><![CDATA[这篇文章是对《D19.1.0 对gluLookAt，gluPerspective和glOrtho的理解》的部分更正和完善。

01 gluLookAt

假定现在手上有一台单反，你可以拿着单反拍正前方，可以仰起头拍天空，还可以拿相机拍地面，相机如何拍摄对应的是gluLookAt函数。
gluLookAt功能演示：​
从正前方看 斜向下45°看 从正上方看
​
理解gluLookAt之前，先概述O...]]></description><category></category></item><item><title><![CDATA[D46.1.0 OpenGL坐标系统]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/97040383</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/97040383</guid><author>WOODS_CTBU</author><pubDate>Tue, 23 Jul 2019 21:56:58 +0800</pubDate><description><![CDATA[01 坐标裁剪

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

​



02 视口：把绘图坐标映射到窗口坐标

裁剪区域的高度和宽度很少正好与窗口的高度和宽度（以...]]></description><category></category></item><item><title><![CDATA[D45.1.0 尽量用const enum inline 替换 #define]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/96365928</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/96365928</guid><author>WOODS_CTBU</author><pubDate>Wed, 17 Jul 2019 21:23:19 +0800</pubDate><description><![CDATA[01 使用const替换#define

通常，我们很习惯在程序起始位置写出#define ASPECT_RATIO 1.653的语句。这样的定义往往会有如下隐患:



	ASPECT_RATIO从未被编译器看见，可能在编译器开始处理源码之前就被预处理器移走了。名称ASPECT_RATIO可能没进入记号表内，于是会出现变异错误的信息。
	
	
	当ASPECT_RATIO定义在一个非我们缩写的...]]></description><category></category></item><item><title><![CDATA[D41.1.1 const和指针的应用]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/95066230</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/95066230</guid><author>WOODS_CTBU</author><pubDate>Mon, 08 Jul 2019 15:59:29 +0800</pubDate><description><![CDATA[原理

书上看到这样一节代码：


int gorp = 10;
int sloth = 3;
const int *ps = &amp;sloth;//a pointer to const int
int * const finger = &amp;sloth;//a const pointer to int


注意注释中的英文部分：指向常整型的指针和指向整型的常量指针。

写代码过程中”c...]]></description><category></category></item><item><title><![CDATA[D40.1.0 为什么读技术书籍总是“从入门到放弃”？]]></title><link>https://blog.csdn.net/WOODS_CTBU/article/details/95043158</link><guid>https://blog.csdn.net/WOODS_CTBU/article/details/95043158</guid><author>WOODS_CTBU</author><pubDate>Mon, 08 Jul 2019 09:28:38 +0800</pubDate><description><![CDATA[这篇文章是李笑来《自学是门手艺》的读书笔记，书中的一个章节是关于“如何从容应对含有过多 “过早引用” 的知识？”


注：文章中引用部分都是摘自李笑来《自学是门手艺》一书。


进而想到，为什么读编程书籍会如此痛苦，以致于现在靠“C++吃饭”的我还是没认真读完一本C++编程书籍？同样，为什么总是这么多人“21天，从入门到放弃了？”

我认为最大的障碍就是文章中提到的“过早引用”，是过早引用让我们读...]]></description><category></category></item></channel></rss>