开启C++大门
总结项目中用到的C++知识,自己犯过的编程错误。
帮主写书
人人可以成为技术大牛!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
VS开发中,常见编译问题解决方案
01 无法打开源文件 “xxxx.h”原创 2020-11-20 13:47:53 · 1252 阅读 · 2 评论 -
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 · 926 阅读 · 0 评论 -
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 · 746 阅读 · 0 评论 -
如何在类的内部创建线程并安全退出
注意两个问题: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 · 406 阅读 · 0 评论 -
可用于缓存大量数据的模板类
2020年5月21日上一篇怎样说到下图所示的处理数据的流程,我给出了Sensor类的实现。那么这个类是针对线阵相机的数据结构实现的,如果我现在换成3D相机又该怎么操作,我发现只要更换数据结构体就行,其他都可以不用动。再进一步思考,这个模型适用的情形总可以是“一头高频次的出数据,另一头不断地处理数据”。那我完全可以将这一套逻辑封装成一个模板类。template<typename D>class proSensor{ ......}可以将D换成任何类型的数据。 #pragma原创 2020-05-22 17:33:19 · 311 阅读 · 0 评论 -
处理大量数据的一种方法(C++)
处理场景:三台线阵相机或者多台其他传感器与工控机连着,通过调用相机的SDK控制相机,例如同时开关,同时从相机中获取数据。然后采集软件接收到相机数据后,将数据保存到硬盘。处理的问题:如果三台相机发送数据频率很快,并且数据量很大的话,如何快速将数据写入到硬盘里或者对数据的其他处理,从而保证内存不增长?解决方案简述:每收到一坨相机的数据,就将其从尾部压入队列;同时有另外一个线程在等着处理这个队列,只要这个队列有数据,就从头部弹出一个数据,然后对这个数据进行相应的处理。这里存在一个问题:如果相机频率太.原创 2020-05-20 20:01:01 · 3882 阅读 · 1 评论 -
D26.1.0 复制构造函数和拷贝赋值操作符
这是《Effective C++》中条款12的读书笔记。copy构造函数和copy assignment操作符,称为copying函数。通常情况下编译器有默认的构造函数和赋值操作符,这两个函数都可以将被拷对象的所有成员变量做一份拷贝。但是当程序员声明自己的copying函数的时候,编译器不再做默认的拷贝操作。例如下面一个Customer类:class Customer{pu...原创 2019-06-05 15:53:53 · 333 阅读 · 0 评论 -
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 · 284 阅读 · 0 评论 -
D21.1.0 C++,从未开启你的大门
这不是一篇纯技术文章,文末有煽情。先解决技术问题。在项目中我开发后端采集程序。项目开始,我使用的红外相机类型是CX320,后来因为某些原因不得不换同一个牌子的其他类型相机CG640。这两款相机使用的SDK是一样的,但是两款相机使用的具体函数不一样。这两个相机有两点不一样: 采集的图片大小不一样,一个是320*240,一个是640*480; 采集红外数据的具体函数不一样...原创 2019-05-30 10:32:40 · 224 阅读 · 0 评论 -
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 · 307 阅读 · 0 评论 -
D14.1.0 编程经验总结
C++中的mutex(互斥锁)使用在做相机采集的时候,往往会用到底层的触发函数,在这个函数里面实现将采集到的相机数据发送出去。并且通常这个函数通常是一个线程。之前犯的错误是这样:认为凡是用到了线程,就得加上mutex(互斥锁)。由此可能造成线程的堵塞,造成效率低下。UINT WINAPI SocketThreadProc(LPVOID pParam){ Cox320IRC...原创 2019-05-20 16:23:57 · 228 阅读 · 0 评论 -
D13.1.0 如何封装一个类 C接口版
接上一篇《如何封装一个类 C++接口版》,今天写如何以C语言形式开放一个类的接口。C++接口版本地址:https://blog.youkuaiyun.com/WOODS_CTBU/article/details/90106258。上一篇我写到我不想把我的实现文件.cpp提供给别人,我也不想让别人看到我定义的私有成员和我调用了哪家的SDK开发我的程序。我只想给别人开放该看到的东西。用C++的方式...原创 2019-05-18 20:15:10 · 480 阅读 · 0 评论 -
如何封装一个类 C++接口版
先描述题目要表达的意思:我现在需要基于别人给的SDK,开发我自己的程序。例如基于别人给的miniBird.h、miniBird.lib和miniBird.dll,我自己写了一个类叫Bird,并且我开发的这个类也是需要给别人使用的,所以我也要提供Bird.h、Bird.lib和Bird.dll这三个文件给别人调用。我肯定不想把我的实现文件.cpp提供给别人,我也不想让别人看到我定义的私有程序和其...原创 2019-05-11 10:06:38 · 2761 阅读 · 2 评论 -
使用抽象类开放接口的原理
此文的大部分内容摘自https://blog.51cto.com/billhoo/1650506,作者是Alex Blekhman。普通的导入导出C++类的方式都是使用_declspec(dllexport)/_declspec(dllimport)来导入导出类。使用只有纯虚函数的抽象类之所以不需要导出,是因为纯虚函数自带虚函数表。先定义一个纯虚函数类:// The abstr...原创 2019-05-11 10:04:08 · 282 阅读 · 0 评论 -
VS开发过程中,“无法打开源文件 xxxx.h”问题的解决方法?
问题出现的原因只有一个: 你没有把相关的.h文件包含到你的工程中,不管你使用的是绝对路径还是相对路径。很多人的问题可能是路径很明确的包含进去了,可还是出现了“无法打开源文件”,为何?那是因为你的编译平台选错了,例如你建立了一个x86的项目,但是说选择包含路径的时候确实默认的x64平台。如下图:解决办法是: 如果使用的是x86那么弹出的属性页中就选择win32,再把相关的.h或者.li...原创 2018-12-19 16:53:20 · 26071 阅读 · 9 评论 -
D56.1.0 《并发编程实战》读书笔记01
01 为什么使用并发?为了划分关注点而使用并发通过将相关代码放在一起并将无关的代码分开,这种方法可以是你的程序更容易理解和测试,从而减少出错的可能性。你可以使用并发来分隔不同的功能区域,即使在这些不同功能区域的操作需要在同一时刻发生的情况下。如果不显示地使用并发,你要么被迫编写任务切换框架,要么在操作中主动调用不相关的代码。例如为台式计算机提供的DVD播放程序。这样一个程序基本上具备...原创 2019-09-24 20:07:05 · 260 阅读 · 0 评论
分享