- 博客(268)
- 资源 (7)
- 问答 (1)
- 收藏
- 关注
原创 C/C++中深浅拷贝(map、vector)与内存释放
在实际应用中,有时需要进行map的深拷贝,直接上代码:#include <iostream>#include <string>#include <map>#include <string.h>#include <iterator>using namespace std;int main(){ map<string,int>m_map; m_map.insert(make_pair<string,int..
2021-01-03 20:05:50
13514
原创 js正则表达式-匹配空格/数字范围/网址/电话等常用表达式
项目需要匹配gh字符,要求gh前面有空格,后面有无空格都可以。思路如下:\s :表示space,空格+: 一个或多个^: 开始,^\s,以空格开始$: 结束,\s$,以空格结束|:或者/g:global, 全局str.replace(/^\s+|\s+$/g,'')错误写法如下: var reg=/(^\s+)gh(|\s)/geg:str='hello chinagh'reg.test(str) //false正确的写法如下:reg=/( +...
2020-07-27 21:59:24
20553
1
原创 VSCode的clangd插件简单介绍和使用
摘要:本文介绍了使用clangd工具链提升C/C++开发效率的方法。首先说明clangd提供代码补全、错误检查、交叉引用等功能,强调需通过compile_commands.json配置构建信息。接着给出安装指南(VSCode插件+服务器端安装),并演示了一个包含CMake项目的完整示例:展示项目结构、CMake配置(需设置CMAKE_EXPORT_COMPILE_COMMANDS)、源代码实现(使用Pimpl惯用法),最后说明如何配置VSCode识别compile_commands.json。通过该方案,开
2025-12-23 22:57:00
651
原创 Qt中QSettings的键值使用QDataStream进行存储
本文介绍了Qt框架中QDataStream和QSettings类的使用方法。QDataStream实现跨平台二进制数据序列化,可将基本数据类型转换为与系统无关的二进制流。QSettings提供跨平台的应用程序配置管理,支持Windows注册表、macOS属性列表和Unix的INI文件。 文章通过两个实例演示了:1)使用QDataStream将数据序列化后存入INI文件,并重新解析输出;2)遍历INI文件所有节和键值对,处理二进制数据存储时遇到的键值结构错误和数字解析问题。后者主要涉及字节序设置和二进制存储方
2025-09-02 23:26:04
1319
原创 QMainWindow使用QTabWidget添加多个QWidget
本文介绍了在Qt中使用QTabWidget添加其他Widget的两个方法。代码示例展示了如何创建包含两个标签页的窗口,每个标签页采用不同的布局方式:第一个标签页使用QVBoxLayout和QHBoxLayout组合,包含两个按钮和一个可拉伸的输入框;第二个标签页使用QVBoxLayout和弹簧控件实现类似布局。文章还提供了Qt官方文档参考链接,包括QTabWidget类、QDataStream序列化类和容器类的说明。通过setStretch方法和QSpacerItem的使用,演示了如何控制Widget在布局
2025-09-01 22:21:59
300
原创 sqlite创建数据库,创建表,插入数据,查询数据的C++ demo
该文章介绍了SQLite数据库的C/C++编程接口,重点讲解了sqlite3_exec()函数的使用方法。主要内容包括:1) 演示了完整的SQLite数据库操作流程,包括打开数据库、创建表、插入数据和查询数据;2) 详细解析了sqlite3_exec()函数的参数和返回值,包括回调函数的编写方法;3) 提供了创建表、插入数据和查询数据的代码示例;4) 强调了SQL注入风险和错误处理的重要性;5) 对比了sqlite3_exec()与预处理语句的适用场景,建议高频操作使用预处理语句。文章可作为SQLite数据
2025-08-24 21:36:43
1062
原创 QWidget/QMainWindow与QLayout的布局
本文介绍了Qt中三种界面布局的实现方式:1)使用QWidget和QVBoxLayout创建带工具栏的简单窗口;2)嵌套QHBoxLayout和QVBoxLayout实现复杂布局;3)针对QMainWindow的特殊布局要求,必须通过centralWidget设置布局。文章还对比了QWidget和QMainWindow的区别:QWidget适合简单窗口,而QMainWindow内置菜单栏等组件,适合复杂主程序界面。所有示例均提供完整代码和运行效果截图,演示了不同场景下的布局实现方法。
2025-08-21 23:33:38
1131
原创 DFT设计中的不同阶段介绍
摘要:DFT软件开发流程包含设置、分析、插入和验证四个核心阶段。设置阶段搭建基础环境,包括设计加载和约束定义;分析阶段检查设计规则并识别问题;插入阶段实现扫描链、MBIST等DFT逻辑;验证阶段通过仿真和ATPG确保正确性。各阶段需迭代优化,直至满足覆盖率与功能要求。最终还需支持量产测试调试与良率分析,以提升芯片可测试性和制造质量。
2025-07-30 21:47:39
1639
原创 DFT不同维度中gate、cell、instance介绍
摘要:数字电路设计中,gate、cell和instance是三个关键概念,分属不同抽象层级。gate是基础逻辑单元(如与门、或门),用于门级网表;cell是工艺相关的标准单元(如触发器、存储器),具有物理实现参数;instance是对cell或模块的引用实例,具有唯一标识。三者区别在于:gate为功能层,cell为物理层,instance为引用层;gate不可复用,cell可复用,instance通过名称复用。设计流程中,gate由逻辑综合生成,cell用于物理设计,instance实现模块化引用。
2025-07-30 21:29:07
1238
原创 DFT中Primitive、Design、Hierarchical介绍
Primitive是电路设计中最基础的逻辑单元,通常由EDA工具库直接提供,如与门(AND)、或门(OR)、触发器(Flip-Flop)、多路选择器(MUX)等。:Design是由多个Primitive或其他设计单元组合而成的功能模块,代表电路中的特定功能或子系统,如加法器、计数器、存储器控制器等。:Hierarchical是一种设计方法学,通过将复杂电路分解为多个层次化的子模块(即设计单元),形成树状结构,便于管理、验证和测试。
2025-07-30 21:25:30
991
原创 数字集成电路中时延不可综合与时间单位介绍
在 Verilog 或硬件描述语言(HDL)中,“综合”(Synthesis)是指将用高级抽象语言(如 Verilog 或 VHDL)描述的行为级或寄存器传输级(RTL)设计,转换为具体的门级实现的过程。换句话说,综合工具会将 HDL 描述的逻辑功能映射到硬件结构(如与门、或门、触发器等),并生成一个可实现的硬件电路。综合是将 HDL 描述的行为或逻辑功能,转换为具体硬件电路的过程。延时语句(如#10)是不可综合的,因为它们描述的是仿真中的时间行为,而不是硬件中的逻辑关系。
2025-04-11 08:00:00
881
原创 Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示
Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示,当Qt的窗口最小化时,isVisible值一定是true,这是正常的。在Qt中,当你点击窗口的最小化按钮时,Qt内部不会自动调用 hide() 方或 setVisible(false) 来隐藏窗口。相反,它会改变窗口的状态,将其标记为最小化。窗口的最小化是一个特殊的状态,不同于被显式隐藏。在最小化状态下,窗口的内容不再显示在屏幕上,但它仍然存在于系统中,并且可以通过操作系统恢复显示。Qt通过 isMinimized() 方法提供了检测窗口是
2025-02-13 23:14:04
1395
原创 verilog中可综合电路介绍和门级网表作用
Verilog中的可综合电路是指那些能够通过EDA(电子设计自动化)工具自动转化为硬件逻辑(如与、或、非门等)的Verilog代码所描述的电路。这一过程称为综合,它将HDL(硬件描述语言)代码转化为门级网表,进而可以映射到具体的硬件电路上。这些电路可以在实际的硬件平台上实现,并用于执行特定的功能。Verilog的可综合电路是通过特定语法和规则编写的,能够直接被EDA工具综合成硬件逻辑的电路。它们与其他电路(如不可综合电路、仿真电路等)在实现方式、用途、综合过程和代码要求等方面存在明显的区别。
2024-12-18 23:04:08
1595
原创 8位移位寄存器的verilog语言
并在每个时钟周期将其移动到寄存器的最低位,同时寄存器的内容向左移动一位。的内容进行左移操作。具体来说,每次时钟上升沿到来时,如果复位信号。拼接在一起,形成了一个新的8位值,然后这个新值被赋给寄存器。这个左移操作是通过Verilog的位拼接操作符。也可以,但这里为了清晰起见使用了完整表示)。被清零(所有位都设置为0)。因此,可以说上面的移位寄存器是一个。的左移寄存器,它接受一个单比特输入。来明确表示一个8位的零值(虽然。为高,表示复位激活),则寄存器。为高(即未激活复位),则寄存器。上面的代码中,使用了。
2024-12-18 22:52:56
887
原创 Verilog的线与类型与实例化模块
在Verilog中,线与(wire-AND)类型通常用于描述多个信号进行逻辑与(AND)操作的电路行为。虽然Verilog本身没有直接定义一种名为“线与”的数据类型,但可以通过使用wire类型结合特定的逻辑操作来实现线与功能。
2024-11-28 22:11:03
1458
原创 Verilog使用liberty文件中cell单元的demo
Liberty(.lib)文件是用来描述标准单元库中逻辑单元(如门电路、触发器等)的时序和功耗特性的,不是用来直接定义Verilog中的元件。在Verilog设计中,我们通常通过实例化模块(module)来创建电路,而这些模块可以是自定义的,也可以是来自库文件的。Liberty文件描述和一个使用这些描述中逻辑单元的Verilog模块。但请注意,实际的Liberty文件内容要复杂得多,并且通常由EDA工具自动生成。
2024-11-28 22:06:43
998
原创 C++ 实现HTTP的客户端、服务端demo和HTTP三方库介绍
C++ 实现HTTP的客户端、服务端demo和封装HTTP协议的三方库介绍。本文使用C++模拟实现http的客户端请求和http的服务端响应功能,并介绍常用的HTTP协议封装的三方库。cpp-httplib适合需要轻量级、简单易用且跨平台的HTTP库的项目。libcurl适合需要强大功能和灵活性的项目,特别是需要支持多种协议和与其他库配合使用的场景。Poco C++ Libraries适合需要丰富功能和稳定性的大型项目。
2024-06-12 23:10:43
3961
1
原创 HTTP协议介绍与TCP协议的区别
是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 是基于TCP/IP 进行数据的通信,通常使用端口 80/8080。HTTP可以传输多种数据类型,如html文件、图片、视频等数据。
2024-05-30 22:57:48
2425
原创 std::find_if函数结合函数对象、lambda表达式查找元素
std::find_if函数头文件:#include 里面。函数意义:查找满足条件的元素的第一次出现。时间复杂度O(n)。参数:first − 输入迭代器到初始位置。last − 最终位置的最终迭代器。pred − 一元谓词,即:接收一个参数的函数对象或者一个参数的lambda表达式,return:返回一个迭代器,指向 (first,last) 范围内满足条件的第一个元素.没有找到,指向最后一个元素。谓词介绍返回bool类型的仿函数称为谓词。
2024-05-16 22:39:26
2034
原创 二叉树的前序、中序、后序遍历的C++实现
二叉树的前序、中序、后序 遍历的C++实现方法,使用递归法的C++实现demo,包括二叉树的定义、创建、二叉树数据的释放。
2024-05-08 22:56:59
599
原创 设计模式之观察者模式(优先使用对象组合的原则)的C++实现
实现订阅发布模式,这种设计的优点是想订阅数据的类不需要继承订阅者类的抽象类,减少了一层类的继承;当然,具体情况需要可根据需求进行订阅者发布者模式的代码设计。
2024-04-21 13:40:59
586
原创 C++ 使用共享内存的进程通信方式模拟生产者消费者模型
C++ 使用共享内存的进程通信方式模拟生产者消费者模型,进程间的同步使用信号量SystemV方式。
2024-04-16 23:06:37
540
1
原创 linux下backtrace函数获取函数调用堆栈信息用法
使用backtrace可以查看函数的调用关系,也可以查看程序异常时的函数调用关系。配置生成coredump生成文件的方法也可以捕获异常,但产生的coredump文件内存较大,backtrace函数的方法占用的内存小。:查看函数Print1函数是哪个函数调用。生成可执行文件的命令如下。执行下面运行可执行文件。
2023-10-30 21:37:38
919
原创 VSCode Linux的C++代码格式化配置
然后,重新打开VSCode,按下Ctrl+S时会自动格式化代码。保存后,在当前工程下面,按下Ctrl+S保存时会自动格式化代码。得到安装地址:/usr/bin/clang-format。(3)不用保存时格式化代码,使用快捷键格式化代码。默认的格式化代码快捷键Ctrl+Shift+I。
2023-10-03 09:44:59
1117
原创 设计模式之解析器(Interpreter)的C++实现
设计模式之解析器(Interpreter)的C++实现。在软件开发的过程中,需要实现一种需求,该需求的结构稳定,但是需求的业务内容会频繁变化,如果使用普通语法实现需求,需要经常更新代码,不具有灵活性。可以使用解析器模式解决实现该类需求,解析器是实现一种能够解析该需求结构语法的功能代码,针对不同的业务调用对应的解析规则代码。有一个字符串的加减计算,如'a+b+c-d-e',其中a,b,c,d,e分别对应带计算的值。
2023-09-17 13:01:16
592
原创 linux下检测CPU性能的mpstat命令安装与用法
linux下检测CPU性能的mpstat命令安装与用法P: 指定要监控哪个CPU,范围是[0 ~ n-1], ALL表示监控所有CPU都监控。count: 采样的次数,count只能和delay一起使用。上面输出了2次的CPU状态,后面输出了所有 CPU 的平均值。(4)检测每个CPU的状态,每1秒检测1次,检测2次。interval: 相邻的两次采样的间隔时间、(2)1秒检测1次,检测5次CPU。mpstat的命令用法也可参考。(3)检测每个CPU的状态。(1)检测总的CPU状态。
2023-09-09 21:47:20
2377
原创 设计模式之访问器模式(Visitor)的C++实现
在软件开发过程中,早已发布的软件版本,由于需求的变化,需要给某个类层次结构增加新的方法。如果在该基类和子类中都添加新的行为方法,将给代码原有的结构带来破坏,同时,也违反了修改封闭,扩展开放的原则。访问器模式可以实现不改变原有代码结构的前提下,基于双向分发机制(2次虚函数绑定实例对象),通过扩展的方法实现新的接口。上面的代码,ConcreteElementA和ConcreteElementB的方法更新,通过Visitor基类的扩展子类来实现。(2)Visitor的子类必须实现Element的所有子类方法。
2023-09-09 21:08:55
438
原创 设计模式之命令模式(Command)的C++实现
命令设计模式(Command)的C++代码实现。在软件开发过程中,“行为请求者”和“行为实现者”通常呈现一种“紧耦合”。如果行为的实现经常变化,则不利于代码的维护。命令模式可以将行为的请求者和行为的实现者进行解耦。具体流程是将行为请求者封装成一个对象,将行为实现者抽象成一个类。
2023-08-27 17:46:43
2063
原创 设计模式之职责链模式(ChainOfResponsibility)的C++实现
职责链模式(ChainOfResponsibility)的C++代码实现。在软件开发过程中,发送者经常发送一个数据请求给特定的接收者对象,让其对请求数据进行处理(一个数据请求只能有一个对象对其处理)。职责链模式的处理流程是:设计一个职责链处理基类,该类具有指向下一个待处理类的变量,通过set接口设置下一个待处理的链对象成员;该类具有遍历处理请求的功能,遍历过程中,只要有一个对象处理了请求,则停止遍历;该基类抽象了2个接口分别为:判断是否处理该类型请求和处理消息的功能接口。其他的具体职责链类继承并实现职责链
2023-08-22 22:57:54
915
1
原创 设计模式之迭代器模式(Iterator)的C++实现
迭代器模式(Iterator)的C++实现,泛型编程实现迭代器的C++实现。在软件开发过程中,操作的集合对象内部结构常常变化,在访问这些对象元素的同时,也要保证对象内部的封装性。迭代器模式提供了一种利用面向对象的遍历方法来遍历对象元素。迭代器模式通过抽象一个迭代器类,不同的对象继承自迭代器类,外部通过统一接口访问元素。面向对象实现的迭代器模式是在程序运行时,通过虚函数去操作对象元素;相比于C++中的泛型编程实现迭代器的运行性能较低(泛型编程是在编译时已确定访问的元素),所以建议使用泛型编程实现迭代器。
2023-08-20 18:17:47
1548
原创 设计模式之组合模式(Composite)的C++实现
组合模式(Composite)的C++代码实现。在软件开发过程中,使用者Client过多依赖所操作对象内部的实现结构,如果对象内部的实现结构频繁发生变化,则使用者的代码结构将要频繁地修改,不利于代码地维护和扩展性;组合模式可以使用者代码与复杂地操作对象结构进行解耦,根据操作对象的实现结构抽象出一个的基类,让操作对象内部根据需求变化实现复杂数据地操作接口,则使用者使用操作对象提供的统一接口就可完成功能。
2023-08-20 13:30:38
866
原创 设计模式之备忘录模式(Memento)的C++实现
备忘录模式(Memento)的C++代码实现。在软件功能开发过程中,某些对象的状态在转换过程中,由于业务场景需要,要求对象能够回溯到对象之前某个点的状态。如果使用一些共有接口来让其他对象得到对象的状态,便会暴露对象的实现细节。备忘录模式是在不破坏对象封装性的前提下,增加一个备忘录类,用于保存捕获对象的内部状态。当该对象需要回溯到之前状态时,只需调用备忘录接口获取之前的状态,并设置状态。
2023-08-19 22:01:29
1111
原创 设计模式之状态模式(State)的C++实现
状态模式(State)的C++代码实现。在开发过程中,某些对象的状态经常面临变化,不同的状态,其对象的操作行为不同。比如根据状态写的if else条件情况,且这种条件变化是经常变化的,这样的代码不易维护。可以使用状态模式解决这类问题。状态模式是将状态值抽象成一个基类,将不同状态下的操作,封装成基类中的虚函数,使用者可以依赖抽象的基类来进行功能开发。
2023-08-19 14:51:36
1060
原创 设计模式之中介者模式(Mediator)的C++实现
中介者模式(Mediator)的C++代码实现在软件组件开发过程中,如果存在多个对象,且这些对象之间存在的相互交互的情况不是一一对应的情况,这种功能组件间的对象引用关系比较复杂,耦合度较高。如果有一些新的需求变化,则不易扩展。中介者模式使用一个“中介对象”去管理对象间的关联关系,这个中介对象里面定义了对象间的数据统一交互接口,解耦对象间的直接交互依赖,从而提高代码的扩展性。
2023-08-18 19:23:06
992
原创 设计模式之适配器模式(Adapter)的C++实现
适配器模式(Adapter)的C++代码实现。由于使用环境的改变,之前一些类的旧接口放在新环境的功能模块中不再适用。适配器可以解决此类问题。适配器模式:通过增加一个适配器类,在适配器接口中做一些适配操作,将旧模块类转换成使用者Client类期望的接口。
2023-08-18 15:53:25
1559
原创 设计模式之代理模式(Proxy)的C++实现
代理模式(Proxy)的C++实现。在组件的开发过程中,有些对象由于某种原因(比如对象创建的开销很大,或者对象的一些操作需要做安全控制,或者需要进程外的访问等),会使Client使用者在操作这类对象时可能会存在问题:(1)使用者直接访问这种对象会使系统带来很多麻烦。(2)或者使用者使不能直接访问这类对象;使用代理模式就可以解决此类问题。有一个主题类,该类具有请求功能和数据转换功能。而Client使用者不能直接访问和操作它,只能间接的通过其它类进行访问操作。3、代理模式的代码实现。
2023-08-18 12:52:24
1541
原创 设计模式之门面模式(Facade)的C++实现
门面模式(Facade)的C++实现。在组件的开发过程中,某些接口之间的依赖是比较紧密的,如果某个接口发生变化,其他的接口也会跟着发生变化,这样的代码违背了代码的设计原则。门面设计模式是在外部客户程序和系统程序之间添加了一层中间接口,使依赖的接口之间相互解耦。有3个公司,每个公司都有自己的工作流方式;客户端代码使用这3个公司的工作流。3、门面模式代码实现。
2023-08-17 22:28:50
786
Qt定时消息弹窗实现demo
2025-10-21
tcl8.6.16静态安装库
2025-04-28
gdb调试Qt类型变量的配置
2025-04-27
ROS的自定义msg文件的订阅发布功能demo
2024-10-28
linux下tcp的服务端和客户端代码,一个服务器对应多个客户端 (多线程和select方式创建服务端)
2023-08-30
OpenglES离屏渲染 C++ demo
2023-03-18
VSCode中配置ros环境
2022-12-07
CMakeList配置文件介绍
2022-12-07
VS2017番茄助手Visual Assist 10.9 Setup2270下载
2022-08-07
QtSocket.rar
2021-05-06
C++SNMPv3 使用add_usm_user函数时,私有加密协议选中AES报错
2021-03-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅