- 博客(80)
- 资源 (7)
- 收藏
- 关注
原创 CMake实际项目使用方式
**## CMakeLists.txt**```bashmake_minimum_required(VERSION 3.18)set(PNAME yourProjectName)project(${PNAME})set(CMAKE_CXX_STANDARD 14)set(JSON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdPart/jsoncpp)include(${CMAKE_CURRENT_SOURCE_DIR}/3rdPart/opencv/OpenC
2021-06-04 17:42:49
224
原创 CMake+VScode+Linux+远程调试
远程调试linux程序,用cmake生成工程,vscode远程调试,tasks.json配置文件//tasks.json{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "C.
2021-05-20 10:12:36
672
原创 CMake生成动态库同,并调试
CMake编写项目生成文件,生成动态库,同时生成调试程序。cmake_minimum_required(VERSION 3.10)set(PNAME yourProject)option(BuildTest "build test" ON)SET(CMAKE_CXX_COMPILER "g++") #设置编译器(可选的有gcc,g++)project(${PNAME})file(GLOB src src/*.cpp src/*.c)file(GLOB head src/*.h.
2021-05-17 14:12:58
803
原创 go语言的学习
go的协程语言级别支持协程(goroutine)并发(协程又称微线程,比线程更轻量、开销更小,性能更高),操作起来非常简单,语言级别提供关键字(go)用于启动协程, 在同一台机器上可以启动成千上万个协程。 一个线程可以包含多个协程,共享堆不共享栈。 协程间一般由应用程序显式实现调度,上下文切换无需下到内核层,高效不少。 协程间一般不做同步通讯,而golang中实现协程间通讯有两种:共享内存型,即使用全局变量+mutex锁来实现数据共享。消息传递型,即使用一种独有的channel机制进行异步
2021-04-27 11:02:48
119
原创 OpenCV图像旋转
图像旋转,90,180,270void rotateMat(cv::Mat &m){ int rotate = 90;//旋转的角度可以自己设置 if (rotate != 0) { cv::Mat m90, m180; if (rotate == 90) { cv::transpose(m, m90); flip(m90, m90, 0); m = m90; } else if (rotate == 180) { cv::flip(m,
2021-04-26 17:06:37
325
原创 OpenCV图片上写中文汉字C++
OpenCV图片上写中文汉字,参考别人的记录一下void paDrawString(cv::Mat& dst, const char* str, cv::Point org, cv::Scalar color, int fontSize, bool italic, bool underline){ CV_Assert(dst.data != 0 && (dst.channels() == 1 || dst.channels() == 3)); int x, y, r,.
2021-04-26 14:36:20
2038
1
原创 MFC控件显示视频或者图片
使用静态文本框在控件上显示视频或者图片 CRect rect; GetDlgItem(IDC_STATIC_PLAY)->GetClientRect(&rect); // 获取图片控件矩形框 cv::Size dsize = cv::Size(rect.Width(), rect.Height()); cv::Mat img = cv::Mat(dsize, CV_8UC3); cv::resize(imgSrc, img,
2021-04-26 14:32:20
854
原创 C++的ofstream写文件,文件保存CSV格式
#include<fstream>//头文件td::string csvPath=szDir + "\\output.csv";std::ofstream csvfile;csvfile.open(csvPath, std::ios::out);if (!csvfile){ //文件打开失败 return;}//csv文件输出csvfile <<"image name" << ","<<"属性1"<<","<&l.
2021-04-06 13:27:35
2134
1
原创 MFC关于CEdit添加变量更新显示
关于MFC控件绑定变量的问题UpdateData(FALSE);变量值推送到界面显示。UpdateData(TRUE);界面上的值更新到变量。CString strPath;GetDlgItem(IDC_EDIT1)->GetWindowText(strPath);根据控件的ID获取控件里的内容。CString m_str="show time";m_cedit.SetWindowText(m_str);将变量内容写到控件。CString str...
2021-04-06 13:17:49
1117
原创 函数返回值与左值关系,函数返回值能否做左值?C++
C++语言的函数返回值类型分为两类:内部类型 自定义数据类型左值:可以放到赋值运算符的左边,能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。右值:赋值运算符的右边,不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对象。内部类型:如果函数返回内部类型,并且希望返回值可以作为左值(即可以放在赋值操作符左边的),那就必须返回引用类型。自定义数据类型: 而在函数返回自定义类型(即返回类类型)中根据是否可作为左值,返回值是否可调用成员函数的不..
2021-04-02 18:10:59
2794
原创 面试官问你想了解什么?如何回答
我去了以后做什么工作核心工作是什么? 工作团队的规模,主要业务是什么,每个人独立开发,还是团队合作? 如果入职,入职之前需要做什么技术准备,技术方面非HR给你说的准备资料? 是否有技术分享,提升员工的制度,提升自己的能力的制度?...
2021-04-02 10:58:59
955
原创 实现超大数的加法运算C++
实现超大数的加法运算。将字符串拆解为数字,与字符‘0’的偏移得出数字的真实大小。 每一位进行相加操作,注意进位操作。 多出的长度再进行相加。 不要忘了最后一个进位。#include<iostream>#include<string>#include<vector>std::vector<int> stringAdd(std::string strA, std::string strB){ std::vector<int>
2021-04-02 10:05:10
657
原创 bat脚本之Cmake工程生成
pushd %~dp0if not exist build ( #判断文件夹build是否存在,不存在则就创建 mkdir build) else ( del /S /Q /F build rd /S /Q build mkdir build)pushd build@echo offdel /F /Q CMakeCache.txt #删除以前Cmake生成的文件cmake .. -Tv140_xp -Awin32 #指定工具集popd pop.
2021-04-01 16:42:59
1470
原创 字符串旋转
连续的字符串旋转注意strlen与sizeof的区别//字符串翻转int ReverseString(char* a){ int len = strlen(a); for (int i = 0, j = len - 1; i < j; i++, j--) { char c = a[i]; a[i] = a[j]; a[j] = c; } return 1;}int main(){ char arry[] = "asdfghj"; ReverseString
2021-04-01 15:02:13
100
原创 快速排序总结
步骤:1, 先从数列中取出一个数作为基准2, 分区过程,将比这个数大的数全放到他的右边,小于等于的全部放到他的左边3, 在对左右区间重复第二步,直到各区间只有一个数思想: 挖坑+填数+分治算法int partition_get(int*a, int left, int right){ int i = left; int j = right; int key = a[left]; while (i < j) { while (i<j&&a[j]&..
2021-04-01 14:44:09
117
原创 CMake自动化生成项目
include(Config.cmake) #引入第三方的cmake文件引入已经写好的cmake文件,Config.make例子。get_filename_component(DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)set(INCLUDE_DIR ${DIR}/include/)set(LIB_DIR ${DIR}/lib/win32)set(relative_dll_path lib/win32/my.dll)#cmake的函数实现.
2021-03-31 15:22:44
929
原创 CMake debug与release使用不同的版本库
Debug版本使用的库为depend_d.libRelease版本使用的库为depend.libTARGET_LINK_LIBRARIES(app debug depend_d optimized depend)
2021-02-02 15:53:26
3728
原创 CMake 命令生成vs工程,脚本拷贝可执行程序
如果build文件不存在则创建文件,如果存在则删除其中的内容:pushd %~dp0if not exist build ( mkdir build) else ( del /S /Q /F build rd /S /Q build mkdir build)pushd build@echo offdel /F /Q CMakeCache.txtcmake .. -Tv140_xp -Awin32 popdpopd@echo on...
2021-01-28 10:40:07
660
原创 图像缩放显示导致屏幕花屏
cv::Mat src=cv::imread("....."); CRect rect; GetDlgItem(IDC_STATIC)->GetClientRect(&rect); // 获取图片控件矩形框 cv::Size dsize = cv::Size(rect.Width(), rect.Height()); cv::Mat img = cv::Mat(dsize, CV_8UC3); cv::resize(src, img, dsize); // 转换...
2021-01-25 10:53:48
631
原创 画面上写汉字opencv
目前opencv无法往画面上写汉字,代码是网上查的记录一下.void GetStringSize(HDC hDC, const char* str, int* w, int* h){ SIZE size; GetTextExtentPoint32A(hDC, str, strlen(str), &size); if (w != 0) *w = size.cx; if (h != 0) *h = size.cy;}void paDrawString(cv::Mat& d.
2021-01-11 16:56:50
135
原创 spdlog使用以及头文件
spdlog通用头文件格式#pragma once#include <memory>#include <cstdio>#include <string>#include "spdlog/spdlog.h"#include "spdlog/sinks/basic_file_sink.h"#include "spdlog/sinks/rotating_file_sink.h"#ifdef WIN32#include <Windows.h>#
2020-12-10 10:17:21
1533
原创 N的阶乘递归实现
#include <iostream>using namespace std;int GetNum(int n){ int sum = 1; if(1 == n) { return 1; } sum =n * GetNum(n - 1); return sum;}
2019-09-25 12:56:43
1341
转载 查找数组中第二大的数
快速找出一个数组中的最大数、第二大数。思路: 如果当 前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的值赋给 max。如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值,则要把当前元素的值赋给 secondMax。void GetSecondMaxNumber(int *arr , int n){ int ...
2019-09-25 12:48:26
3644
转载 高并发的问题总结
同步I/O与异步I/O 线程在执行中如果遇到磁盘读写或网络通信(统称IO操作),通常要耗费较长的时间,这时OS会剥夺此线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞。当I/O操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行,这种I/O模式就是同步式I/O或阻塞式I/O。在这种情况下,程序是线下执行的,比...
2019-05-16 17:25:55
1653
转载 C++异常处理(try和catch)
我们通常希望自己编写的程序能够在异常的情况下也能作出相应的处理,而不至于程序莫名其妙地中断或者中止运行了。在设计程序时应充分考虑各种异常情况,并加以处理。在C++中,一个函数能够检测出异常并且将异常返回,这种机制称为抛出异常。当抛出异常后,函数调用者捕获到该异常,并对该异常进行处理,我们称之为异常捕获。C++新增throw关键字用于抛出异常,新增catch关键字用于捕获异常,新增try关键...
2019-05-08 14:42:36
351
转载 VS中的release与debug的区别,以及编译出现的问题
二者的详细区分:Debug:Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。Release:Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。(开发经验,非常重要!...
2019-05-08 14:20:38
6922
转载 提高程序运行效率的10个简单方法
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。注:以C/C++程序为例一、尽量减少值传递,多用引...
2019-04-26 18:32:38
3119
转载 多线程编程注意事项
多线程编程的注意事项 1、明确目的,为什么要使用多线程?如果是由于单线程读写或者网络访问(例如HTTP访问互联网)的瓶颈,可以考虑使用线程池。如果是对不同的资源(例如SOCKET连接)进行管理,可以考虑多个线程。 2、线程使用中要注意,如何控制线程的调度和阻塞,例如利用事件的触发来控制线程的调度和阻塞,也有用消息来控制的。 3、线程中...
2019-04-26 18:14:51
937
转载 类与类之间的几种关系
1.依赖A类使用到了B类一部分属性或方法。不会主动改变B类内的内容。代码化一些:类A把类B的实例作为方法里的参数使用 类A的某个方法里使用了类B的实例作为局部变量 类A调用了类B的静态方法驾驶员从驾驶学校学习驾车技巧,调用DrivingSchool静态方法“You can drive.”2.关联A类需要B类作为它的属性,以进行一定的读操作。驾驶学校存放汽车Car信息。...
2019-04-26 18:10:48
361
转载 抽象工厂模式
抽象工厂设计模式优点:1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。https:...
2019-04-23 19:51:31
143
转载 链表合并
将两个有序链表合并题目:已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)。递归实现:1.函数返回条件是有一个链表结束,则返回另一个链表2.取两个指针data域较小的作为新的头结点,递归调用循环实现:1.重新申请一个头结点,使用指针p指向他,每新加一个结点,就将指针p后移一位,即指针p永远指向新链表的尾结点2....
2019-04-22 12:56:44
184
转载 归并排序
基本思想: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之合并相邻的子序列:#include <iostream>...
2019-04-22 12:40:32
132
转载 快速排序总结C++实现
1 概念快速排序使用的是分治思想。分治法 分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在计算机科学中,分治法就是运用分治思想的一种很重要的算法。分治法是很多高效算法的基础,如快速排序,归并排序,傅立叶变换(快速傅立叶变换)等等...
2019-04-18 14:13:59
192
转载 判断单向链表中是否有环C++实现
原文:https://blog.csdn.net/caoshangpa/article/details/80363335 判断链表是否有环的经典的方法是快慢指针的方法。 快指针pf每次移动两个节点,慢指针ps每次移动一个节点,如果指针可以追上慢指针,那就说明其中有一个环,反之没有。结论:链表存在环,则fast和slow两指针必然会在slo...
2019-04-17 15:50:30
2799
原创 二分查找算法C++实现
二分查找的应用场景:二分查找目的是在一堆数中找到指定的数。使用二分查找这些数据需要有的特征(面试容易问):存储在数组中。 有序的排列。如果是链表就无法使用二分查找。顺序数组是递增递减,是否有重复的数据没有关系。二分查找的实现“分治法”,分治法基本都可以用递归来实现的,二分查找法的递归实现如下:int SearchBin(int array[], int low, ...
2019-04-17 11:55:27
6812
原创 modbus
Modbus基础1简述,modbus是一种工业用的多设备之间的主从通信协议。只要两台设备之间,是采用modbus协议的主从关系,并连接到相同网络,即可互相通信。因为Modbus只是协议,而且只规定了数据帧,底层连接,可以是232,485或者以太网。设备一般采用232和485进行通信,因为成本低。当然要是考虑远距离传输和多卖钱的话,也会采用以太网,不过应该就会相应复杂一些了。2模式,m...
2017-12-01 17:39:01
2433
1
原创 向本地网络中广播特定的控制帧,设备端检测到控制帧时,发送自己的网络配置信息,如IP,Mask,Mac地址
当一台嵌入式设备连接到PC或多个设备通过交换机与PC相连时,由于设备的IP地址可能未知,那么就需要通过工具进行设备探测,来获取设备的IP地址和网络掩码,获取到的参数可以由PC来参考设备本地的网络参数和PC程序中用来打开设备的参数。 注意事项:(1)广播的目的mac地址为FF:FF:FF:FF:FF:FF(2)发送数据需要先绑定网卡struct sockaddr_ll saddr_l...
2017-09-26 15:45:15
1239
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅