
C++学习
C++基础知识
究极调参工程师
生命是一场无声的道别。
展开
-
基于Qt的金橙子打标卡二次开发
qt金橙子二次开发、激光加工、激光控制二次开发原创 2023-02-18 07:31:12 · 2271 阅读 · 1 评论 -
人理解循环,神理解递归---1
所有的递归都是穷举递归本身就是把所有符合题意的情况穷举出来,任何用递归实现的算法都可以用循环穷举出来。为什么?递归总要有一个结束的条件,而这个结束的条件一定在算法本身是被收敛回来的结束条件的函数值也必须是已知的用递归算组合问题从n个数里面选k个数,有多少种选法首先需要清楚,从n个数中选k个数等于从n-1个数中选k-1个数加上从n-1个数中选k个数比如从1,2,3,4,5中选3个数等于第一个选1与第一个不选1两种情况的总和而第一个选1之后剩下4个数再选两个第一个原创 2020-09-11 17:38:44 · 625 阅读 · 0 评论 -
视觉运控平台软件框架(8)---运动控制窗体
有两个运动控制窗体,一个负责运动控制部分,一个负责Io控制,运动控制下面部分是预留用来做插补功能测试的。IO可以自由配置,外部怎么接线就怎么配置。配置完成后存成ini文件。...原创 2020-08-23 21:27:39 · 2130 阅读 · 5 评论 -
视觉运控平台软件框架(6)---脚本编辑器Qsci
qscintilla是Qt开源的文本编辑器,可用之来做一个代码编辑器,它支持包括C,C++,Python,Java等多种编程语言的语法,当然也是支持我们用到的lua的。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、代码完成(code completion)和调用提示(call tips)。能包含标记(marker)的页边(margin)可用于标记断点、折叠和高亮当前行。网上说这个编辑器包括有错误提示功能,但我还未能找到相关实现方式。在这个界面编辑lua脚本,点击执行即可执行相应的脚本。原创 2020-08-22 22:38:01 · 1162 阅读 · 0 评论 -
视觉运控平台软件框架(5)---脚本lua,luaWrapper
lua源码,源码的编译方式我之前的博客有,这里不提。luaWrapperModule:对自己写的类封装成lua供lua脚本调用。有两种封装方式,可以封装成静态函数或者封装成lua类,但是我自己测试了下,如果封装成lua类的话内存不能自动释放,运行一段时间后内存用完就崩溃了。封装成静态函数调用就不需要关心内存的问题,因为它没有创建新的对象。下面代码是对运动控制部分的封装,有封装成类的也有封装成静态函数的。封装静态函数封装成类供lua脚本调用后续添加图像算法的封装...原创 2020-08-22 21:47:39 · 1286 阅读 · 0 评论 -
视觉运控平台软件框架(3)---通信Communication,ComunicationDialog
目前集成了串口通信与网口通信两个通信方式,串口与网口都是基于qt写的,两种通信方式以动态库导出,用lua脚本封装成相应的serialport类和tcp类,都可以通过lua脚本调用。CommunicationDialog:通信窗体类,用于对通信模式的配置与测试界面有点难看,先将就着,可以用qss美化。...原创 2020-08-22 17:06:42 · 902 阅读 · 1 评论 -
视觉运控平台软件框架(1)---总览
近期有点空余时间,花点时间写了个视觉运控平台框架,该框架集成了运动与视觉部分。视觉和运控部分均可独立配置,并且运控部分的在配置完轴控和视觉部分的图像处理流程后,通过Lua脚本语言控制机器的整个动作流程。这跟目前市场上的大多数视觉软件相比也算是一点点小小的创新。并且考虑后续把所有图像算法都通过lua脚本导出,这样就跟Halcon软件一样的开发方式,还比它多了个运动控制的部分。这样做的好处就是图像处理和运动控制统一了,不需要像现在很多视觉软件的控制方式那样图像处理完后还要设置一个通信与外部负责运控控制的模快去通原创 2020-08-22 15:19:24 · 4409 阅读 · 12 评论 -
(15)C++---回调函数
1、什么情况下会用到回调函数?现在一般遇到的需要用到回调函数的都是涉及应用数据采集的某类设备,设备的SDK是用C语言写好封装好的。当设备采集完数据后需要通知读取数据的一方去对这些数据进行某种处理。比如相机图像的采集,激光雷达数据的采集。例如下面禾赛科技的激光雷达SDK中用回调函数对数据进行处理#include "hesaiLidarSDK.h"//SDK中的函数为:boost::function<void(boost::shared_ptr<cv::Mat> mat原创 2020-07-28 00:05:38 · 424 阅读 · 0 评论 -
(14)C++算法---自定义的线程池
需要并行处理多个细小的任务时,不需频繁创建销毁线程ThreadPool.h#pragma once#include <vector>#include <utility>#include <queue>#include <thread>#include <functional>#include <mutex>#include <condition_variable>class ThreadPool原创 2020-07-26 13:49:55 · 402 阅读 · 0 评论 -
(13)C++容器---优先队列priority_queue
#include <iostream>#include <thread>#include <algorithm>#include <functional>#include <numeric>#include <vector>#include <chrono>#include <thread>#include <queue>//#include "ThreadPool.h"usin.原创 2020-07-26 12:21:12 · 236 阅读 · 0 评论 -
(12)C++算法---查找,排序,std::sort,std::find,std:search,std::binary_search
#include <iostream>#include <thread>#include <algorithm>#include <functional>#include <numeric>#include <vector>using namespace std;struct Point //对类也是一样的{ Point(int _x,int _y) { x = _x; y = _y; } int ..原创 2020-06-21 22:34:24 · 709 阅读 · 0 评论 -
(11)C++算法---transform,std::for_each
遍历容器执行某一算法的快捷用法#include <iostream>#include <thread>#include <algorithm>#include <functional>#include <numeric>#include <vector>using namespace std;int myPlus(int a,int b){ return a + b ;}void print(int a.原创 2020-06-21 15:33:03 · 334 阅读 · 0 评论 -
(10)C++智能指针---shared_ptr,dynamic_pointer_cast
#include <iostream>#include <thread>#include <memory> //智能指针所在头文件using namespace std;class BaseClass{public: BaseClass(){} ~BaseClass(){} virtual void print() { cout << "this is base class" << endl; }protected:.原创 2020-06-21 12:18:06 · 2088 阅读 · 0 评论 -
(9)C++函数模板---template,typename
#include <iostream>#include <thread>#include "Matx.h"template <typename _Tp>void Swap(_Tp& a, _Tp& b){ _Tp tmp = a; a = b; b = tmp;}int main(){ int a = 5; int b = 4; std::cout << a << b << std.原创 2020-06-02 13:05:48 · 269 阅读 · 0 评论 -
(8)C++互斥量,条件变量---mutex,condition_variable
互斥量std::metux:锁定资源不被同时访问条件变量:(1)阻塞线程,等待某条件满足继续往下执行(2)通知其他线程继续执行,因为条件变量在阻塞过程中并不会轮询当前条件的值#include <iostream>#include <thread>#include <windows.h>#include <string>#include <mutex>#include <condition_variable>#inc原创 2020-05-30 21:42:10 · 356 阅读 · 0 评论 -
(7)C++函数绑定---function,bind
// CppTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <thread>#include <windows.h>#include <string>#include <mutex>#include <functional>#include <chrono>int number = 0;std::mutex.原创 2020-05-30 09:55:45 · 850 阅读 · 0 评论 -
(6)C++线程---thread
#include <iostream>#include <thread>#include <windows.h>#include <string>#include <mutex>int number = 0;std::mutex mtx;void fun1(){ for (int i = 0; i < 1000; i++) { std::unique_lock<std::mutex> lck(mtx.原创 2020-05-30 08:56:39 · 168 阅读 · 0 评论 -
(5)C++容器---map
map---一对一hash#include <iostream>#include <thread>#include <windows.h>#include <string>#include <map>void printMap(std::map<int,std::string> &m){ std::map<int,std::string>::iterator itor; if (m.begin原创 2020-05-24 22:01:08 · 143 阅读 · 0 评论 -
(4)C++容器---容器的几种遍历方式
#include <iostream>#include <thread>#include <windows.h>#include <queue>#include <string>#include <list>#include <vector>void printVector(std::vector<int> &vec){ std::vector<int>::iterator.原创 2020-05-23 10:55:49 · 340 阅读 · 0 评论 -
(3)C++容器---list
list---链表,不连续的内存存储数据,随即存取效率低,不支持[]直接访问操作#include <iostream>#include <thread>#include <windows.h>#include <queue>#include <string>#include <list>void printList(std::list<int> &list){ std::list<int原创 2020-05-23 00:32:46 · 152 阅读 · 0 评论 -
(2)C++容器---deque
deque---双端队列,可从两头对元素进行操作#include <iostream>#include <thread>#include <windows.h>#include <queue>#include <string>int main(){ std::deque<int> q = {1,2,3,4,5,6,7,8,9};//deque是可以直接赋值的 int data = 0; data = q.at(2原创 2020-05-21 21:56:04 · 395 阅读 · 0 评论 -
(1)C++容器---queue
queue---先进先出队列int main(){ std::queue<int> q;//区别于deque,deque是可以直接赋值的 q.push(1);// q.push(2); q.push(3); //遍历队列 while(!q.empty()) { std::cout << q.front() << std::endl; q.pop();//把队列头的元素剔除 } q.push(1);// q.push(2); q.原创 2020-05-21 20:46:16 · 168 阅读 · 0 评论