02 2026 档案
摘要:在昨天我学了CMake之后,于是我就打算把我之前写的一个小demo配上CMakeLists,毕竟那个项目只能在我电脑上运行,我还不知道怎么让别人的电脑跑那个项目 而且我之前没有学vcpkg,所有的第三方库都是我自己手动编译成.lib文件的,所以配这个CMakeLists中也非常麻烦 我首先是把CMa
阅读全文
摘要:CMake是跨平台工具,一般我们拉下来一个项目,编译的时候都是用CMake,具体是CMakeList这样的一个脚本文件,具体如何编写这个脚本文件 1、cmake_minimum_required(VERSION 3.10) 这是指定CMake软件的最低版本(要在电脑上装一个CMake工具,在中断输入
阅读全文
摘要:1、对于顺序容器(vector,list等)erase时,需要将迭代器--,得到上一个元素位置,而对于关联容器(map,set)erase时,erase()会返回一个迭代器指向上一个元素 对于clear()只能清除所有元素,并不能清除分配的内存,只有deque能实现边删除元素边清除内存 map的[]
阅读全文
摘要:1、为什么map和set不能像vector一样提取reserve 首先vector是连续的内存,map和set是红黑树,是分配的节点,而节点内存是不连续的,除此之外,vector提取reserve是防止之后的扩容问题影响性能 2、map,set,mutimap,mutiset是红黑树,不过muti-
阅读全文
摘要:1、linux中文件都是放在/下,linux下的目录 bin--放置二进制指令 boot--内核文件 dev--设备文件 etc--系统配置文件目录 lib--库目录 tmp--临时文件目录 proc--存放一些放于内存的文件,不占用磁盘 var--放置系统经常改变的文件(日志) 2、常用命令: r
阅读全文
摘要:首先Qt有2个编译器,一个是MinGW,这个是Qt专用的,另一个是mscv,这个是专门针对vs的,所以下载Qt的时候要把这两个都下载下来,推荐64位 然后有了Qt后就下载vs,目前vs2026是不支持操纵qt的,建议下vs2022 当下好了vs2022后,点击扩展->扩展管理,搜索qt,然后下载Qt
阅读全文
摘要:1、deque的底层是map中控器+分段缓存区,map中控器类似于一个指针数组,其中每个指针元素都指向一块缓存区 能使用vector就不要使用deque,因为deque的迭代器比vector复杂 2、vector的分配空间只能增加不能自动减少,如果动态减少可以使用deque 如何减少vector的内
阅读全文
摘要:我们在做项目时,不管多小的,几乎都避免不了要配置库,而平时配置库又是非常麻烦,常规步骤就是:1、从github上找到对应的库,下载下来 2、运行脚本文件 3、然后进入vs对库进行编译,生成对应的lib、dll文件(期间一定有很多报错) 4、把生成的.lib、.dll以及对应的头文件都放到我们需要的项
阅读全文
摘要:1、STL的hashtable的本质是一个vector的哈希桶,桶的数量一直是质数,当需要扩容的时候就还是质数,每个哈希桶中都储存着一个双向链表,这样,如果有两个不同的元素通过哈希函数得到同一个哈希桶的值,那么这两个元素就储存在双向链表中,这样做是为了防止哈希冲突 如果桶中的链表长度超过了预定的阈值
阅读全文
摘要:1、vector,deque由于是内存连续,所以查找效率高,但是如果插入删除的话涉及到内存的移动,故效率比较低O(N),list的插入较简单,查找较复杂,而map,set底层是红黑树,效率比较稳定O(logn) 2、对于vector,deque进行删除元素时,迭代器会失效(因为涉及到内存移动),所以
阅读全文
摘要:1、unorder_map是通过哈希表实现,相对map通过红黑树实现,unorder_map查找的效率更高,但是如果好多键值通过哈希函数得到的都是一个值(极端情况),那查找效率就会降低 unorder_map和unorder_set本质上相同,都是哈希表实现,不过unorder_set中key就是v
阅读全文
摘要:1、map和set底层都是红黑树,对于平衡二叉树和红黑树而言 平衡二叉树和红黑数都是防止出现"树一直添加左孩子或有右孩子变成链表的情况",在插入时可以进行左旋右旋变的更加均衡,二者中平衡二叉树的查找效率最高(因为左右子树的高度差距不超过1),但是插入效率较低(要不断左右旋),而对于红黑树,最长的路径
阅读全文
摘要:继续之前用Qt做的那个代替主站对从站的4大寄存器写入读取的程序,我总共封装了两个类,一个是ModbusPro(只是用来管理ui),一个是ModbusMaster(用来连接从站,写入,读取数据) 本来我是想着用多线程,主线程更新ui,子线程用来连接从站,然后后面越改bug越多,经常出现野指针的问题,我
阅读全文
摘要:今天用Qt实现一个可以通过modbus对线圈寄存器--读写单个寄存器和多个寄存器,离散寄存器--读单个和多个寄存器,保持寄存器--读写单个寄存器和多个寄存器,输入寄存器--读单个和多个寄存器的功能,大概是这么个效果,ui设计好了 用单例模式设计了一个ModbusMaster的类用于连接从站设备以及对
阅读全文
摘要:1、function封装lambda表达式,本来lambda表达式是个匿名函数,通过function可以给lambda赋名 <int(int)>表示返回值为int,传入的参数为int,且这里的&不能改为=,因为第一步fatoral是空的,当执行到fatoral=[&fatoral](int n){}
阅读全文
摘要:1、原子操作:在线程中保护某个数据不被多个线程共享修改,保证在一个线程结束后才能被另一个线程使用 比如count++会先读取,后进行++,最后再放回寄存器,在这个过程如果有其他线程参与就会混乱 atomic count_atomic(0); 定义count_atomic变量为原子变量不被多线程影响,
阅读全文
摘要:实现了modbus在VS上的环境配置,首先将modbus在github上下载下来"libmodbus.org" 下载好了到这个路径下 然后双击运行configure.js进行环境配置,如果双击不行再打开cmd转到当前目录下运行这个命令--cscript configure.js 配置好了会出现一个.
阅读全文
摘要:具体功能码 一般用RTU模式进行开发,接下来实现一个示例:读取设备地址为3的从设备B的线圈状态寄存器,线圈地址为19到55(37个地址) 主站发送的请求包格式为--"设备地址+功能码+寄存器起始地址(高位+低位)+寄存器数量(高位+低位)+CRC校验位" 设备地址为0X03,功能码为0X01,寄存器
阅读全文
浙公网安备 33010602011771号