自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(228)
  • 资源 (6)
  • 收藏
  • 关注

原创 C++ 介绍STL底层一些数据结构

unordermap一般是指无序映射,元素的存储顺序与插入顺序无关,由哈希函数决定。唯一性,集合中不能重复。比红黑树set更快,查找,插入,删除,平均O(1),不能直接修改集合中的元素值,但可以删除后重新插入。这种结构保证了 插入,删除,查找的时间复杂度为O(log n)比普通二叉搜索树更高效。底层也是红黑树,键(Key)作为排序的依据,值(Value)存储在节点上。set<T>是map<T,bool>的简化版,因为它只存储键,没有值。插入,查找时,树自动平衡,保持O(logn)复杂度。

2025-03-18 18:14:18 22

原创 Qt介绍自定义插件四

成功导入自定义插件后,我们就可以对插件进行使用。

2025-03-17 22:27:34 119

原创 说一说那些年c++面试题 一

1.介绍一下map和set (我:map存放的是键值对,其他的不知道了,set不了解)。5.c++类模版有一个限制类型参数啊,防止崩溃的,介绍一下(我:不知道)。6.介绍一下tcp通信客户端调用的哪几个api函数。2.说一下map和set底层实现(我:好像红黑树,其他不知道);7,tcp客户端向服务端发送数据之前先发送什么(我:不知熬到);最近在面c++,面试官问了四五道题,(线上)完败。3.说一下unorderset(我:不知道)3.说一下底层哈希结构(我:不知道)4.红黑树是有序的吗(我不知道)

2025-03-17 21:57:18 44

原创 qt介绍自定义插件 三

生成的dll文件(debug/和release都可以)然后新建一个工程,然后在ui界面就显示我们自定义的插件。

2025-03-17 21:05:17 97

原创 解决qt中自定插件加载失败,不显示问题。

这里也要选择6.6.0的版本,我之前一直选择6.8.0的 所以一直加载失败。这个问题断断续续搞了一天多,主要是版本不匹配问题。

2025-03-17 20:49:04 306

原创 qt介绍图表 charts 一

qt chartsj基于Q的Graphics View框架,其核心组件是QChartView和QChart.QChartView是一个显示图表的独立部件,基类为QGraphicsView.QChar类管理图表的序列,图例和轴示意图。绘制一个cos和sin曲线图,效果如下。

2025-03-17 11:43:51 241

原创 Qt之自定义界面组件 一

创建一个基于界面widget工程,在wdiget界面添加一个widget界面,将添加的widget界面的类提升为Tbattery.在Tbattery类中重写painEvent电池电量代码。通过qt中的painter绘图事件绘制一个电池电量图的变化。

2025-03-17 01:41:56 234

原创 Qt面试题介绍二

view视图负责展示模型数据给用户,视图从模型中获取需要显示的信息,通过观察者模式来监听模型的变化,以便在模型数据改变时自动更新.controller控制器,处理用户的输入,控制器接收用户的输入,根据 这些输入执行相应的动作,比如更新模型的状态或者改变视图的呈现方式,控制器作为模型合适视图的协调者,确保模型和视图之间良好的隔离。

2025-03-14 11:21:23 165

原创 Qt介绍面试题一

在图形界面gui应用程序中,事件循环是一个无限循环,等待来自操作 系统中的事件,比如键盘输入,鼠标点击,定时器超时等。事件循环任务主要包括等待事件(从操作系统接收事件),事件过滤(初步处理事件),事件分发(根据目标对象分发事件),事件分发(根据目标对象分发事件),事件处理(响应事件)。Qt父子树节点管理机制:是管理界面组件和其他对象生命周期的机制,这种机制确保了当父对象被销毁时,其所有的子对象也被自动销毁,避免内存泄露,简化对象管理。对象所有权,创建父对象,父对象管理子对象生命周期。

2025-03-14 10:53:47 218

原创 qt介绍信号槽二

Autoconnect 默认值线程相同用DirectConnection,不同用QueueConnection。BlockingQueueConnect 发送信号后发送者线程阻塞,直到槽函数运行完。UniqueConnection 避免重复连接,与其他类型按位或结合使用。DirectConnection 信号发送后直接调用槽函数 线程相同。QueuedConnection 槽函数在接收者的线程事件循环时调用。connect中的第五个参数(信号槽连接方式)

2025-03-14 01:50:19 65

原创 qt介绍信号槽一

信号和槽时qt框架中事件处理的一种机制,qt是基于窗口框架的程序,基于窗口框架额程序都是基于事件的,本质信号对应的就是一个事件,槽对应事件处理的动作。事件 被qt框架捕捉到,也就是发出一个信号,然后对这个事件做后续处理,调用槽函数。自定义信号要求:信号是类的成员函数,返回值void类型,使用signals关键字进行声明,只需声明不需要定义。自定义槽函数,要求:返回值必须是void类型,支持重载,参数个数和信号函数参数个数和类型相同或者少于信号参数个数。标准信号槽,在qt提供的一些标准类中。

2025-03-13 23:21:38 290

原创 c++介绍智能指针 十二(2)

这里people存放了三个person对象,由于person 的成员变量m_partner也是指向Person对象的共享智能指针,接下来这三条语句,peoeple中的第一个元素的m_partner指向了第二个元素中的Person对象,第二个元素的m_partner指向了第三个元素中Person的对象,第三个元素的m_partner指向了第一个元素中的Person对象。在下面这个例子里我们输出share_ptr里封装对象指针,由于share_ptr重载了插入运算符,所以可以直接打印出封装的指针的值。

2025-03-13 22:10:28 734

原创 c++介绍智能指针 十二(1)

如果一个指针指向已经释放的区域,那么这个指针就是一个悬空指针,使用悬空指针会 造成不可预料的结果。使用指针的缺点是需要使用专门的代码对指针维护,当删除,替换时,需要释放不再使用的指针对象, 如果出现异常,提前返回等情况,容易造成内存泄露。如果将容器中的指针替换成unique_ptr,不仅获得接近普通性能的智能指针,还实现了内存资源的自动释放,不会出现意外的内存泄露情况。由于智能指针重载了间接成员运算符和解引用运算符,它们会返回智能指针所包含对象的指针或者引用,可以像使用普通指针一样使用智能指针。

2025-03-13 20:01:08 430

原创 c++介绍指针和引用 十一

float calculate(vector<float> values)这样的函数,给它传递是一个浮点数向量 ,如果按值传递,需要对传入的参数向量进行复制,会带来内存和运算的开销,如果我们使用了引用,省去了复制的一步,性能会得到提升, float calculate(vector<float> &values),但是我们有不想让函数修改这个参数,这时可以在参数前面加上const表示这是一个只读引用 float calculate(const vector<float> &values)。

2025-03-13 11:29:11 137

原创 c++介绍函数指针 十

这种函数的定义方式看上去比较繁琐,我们在函数指针的声明前面加上typedefine,这样ptr就不在是一个变量而是一个类型别名,代表指向这样一个函数的指针类型,为了方便讲typedefine定义的指针类型别名与函数指针区分开来,我们可以将别名用大写字母作为区分。指针代表内存中地址标识符,变量,数组都是存储内存中的数据。在排序函数中传入compare函数指针,这样排序函数就可以通过闯入的指针来判断数值的大小。在c++中我们可以通过重载一个类的函数运算符,来实现函数对象,使用函数对象代替函数指针。

2025-03-13 10:45:55 407

原创 c++介绍运算符重载九

接着我们定义一个名叫LocalPtr的类,它是一个简单的指针包装类,它定义了一个指向Complex类的指针。其实就是将运算符作为一个函数,对函数进行重载。error C2679: 二元“<<”: 没有找到接受“std::vector<int,std::allocator<int>>”类型的右操作数的运算符(或没有可接受的转换)间接引用运算符(->),它的返回值必须是一个指针或者一个对象或者对象的引用,并且这个对象的间接引用也被重载了。这段代码中我们可以看到同样是运算符,它的作用是不同的a=a<<3;

2025-03-12 22:13:35 156

原创 c++介绍线程的屏障 八

arrive将计数器减去传入的n.wait等待本阶段计数器到达为0. arrive_and_wait是arrive和wait一起使用,arrive_and_drop除了将本阶段计数减去n,还将下一阶段 初始计数值减去n.线程屏障提供了一个计数器,每个参与任务的线程完成自己的任务后,计数器减1.而需要同步的线程,屏障计数器可以阻塞,等待计数器为0时,继续执行后面的代码。下面来看下barrier,与latch不同时,当barrier计数器为0时,开始新的一轮计时。而barrirer为多个阶段的计数。

2025-03-12 17:02:11 281

原创 c++介绍异步任务 七

而异步任务是将函数调用交给另外一个线程执行,在异步任务执行的同时,原有线程可以继续执行后续的代码,在需要的时候再去获得函数执行的结果。主函数和Computer函数都设置了两秒的延时,而整个程序执行过程用了两秒,可见主函数和异步函数是并行执行的,除此之外两个线程的id号也不相同。2.推迟策略,当future返回一个对象时,只要用于存储函数指针或者对象以及实参的拷贝,当调用get时会调用它存储的这个函数。1.异步策略时相当于新建一个线程或者使用线程池中的一个线程,在线程中 调用一个函数。

2025-03-12 12:03:33 158

原创 c++介绍信号六

信号量是c++中实现对有限资源访问控制,现成通过信号量获得对资源访问的许可。可用资源大于0,线程可以对资源进行访问,此时计数器减1。当计数器为0时,不可访问资源,线程进入等待。当资源释放时,线程结束等待,对资源进行访问。信号量限制并发访问的数量,互斥量实现对具体数据的同步。release函数将技术值加1这是个原子操作,acquire将计数值减1,如果当前为大于1将减1,如果为0,该函数阻塞。信号量常用于生产者和消费者场景以及资源池应用场景。接下来往一个循环buf读写数据。

2025-03-11 23:03:35 254

原创 c++介绍条件变量

conVar.wait如果不使用第二个参数,容易造成死锁,即接收线程错过通知信号,一直阻塞下去。发送线程发送一个条件变量,接收线程收到后才开始工作。处理完毕后,释放互斥量,完成一次通讯过程。接下来接收线程读取和处理共享数据。数据写完后,释放互斥量,发送通知。接收到条件通后,重新获取互斥量。结束阻塞状态,继续运行。进入等待通知释放互斥量。

2025-03-11 14:47:15 161

原创 c++介绍锁五

在正常情况下,如果没有其他程序的竞争,根据sleep_for函数一个写线程写一次数据所用的时间1s,读线程读一次数据所用的时间为500ms。现在这五个线程对同一个数据进行读写,并通过互斥量锁定同一个资源,每个线程的要间隔大约3s才能读写一次数据,这样程序效率太低了。对于一个线程读取数据时,可以允许其他线程 读取数据,这样对于一个写数据较少,读数据较多的并发场景可以显著提高读写效率。在一个应用中一个线程写数据,多个线程并发的读取数据,那么使用普通的锁会出现什么问题呢?写线程使用独占锁,读线程使用共享锁。

2025-03-11 11:30:42 135

原创 c++介绍锁四

线程1拥有互斥量A,线程2拥有互斥量b,当前程1尝试获取互斥量b时,获取失败,线程1释放互斥量a,此时线程2获取互斥量a成功,线程2再获取互斥量c,拥有所有资源后执行线程2.线程2执行完毕后释放互斥量a,b,c。使用计时锁如果在100ms内为获取到想获取得锁,释放当前拥有得锁,进入下一次循环,这样程序进入到活锁得状态,两个线程不断得释放自己当前拥有得锁,而又得不到想获取得锁。线程1获取mtx1等待获取count_mtx,而线程2获取count_mtx等待获取mtx这样程序永远进入阻塞状态。

2025-03-10 23:20:31 190

原创 c++介绍锁三

void func2()函数中 lock_guard<mutex>lock(mtx);//由于这个互斥量已经在外层函数被锁定,进入阻塞在状态,无法解锁。所以主线程永远进入阻塞状态。解决这个问题可以将recursive_mute替换mutex.让我们来看一个简单的死锁状态。

2025-03-10 21:04:09 251

原创 c++介绍锁二

由于上述加锁,代码的健壮性不是很好,如果遇到异常抛出情况,可能存在互斥量未释放问题。锁主要在两个以上的线程中使用,当多个线程访问共享资源时,我们需要使用锁,开保证共享资源的唯一性。unique_lock更加灵活,可以创建后不锁定,在使用过程中进行锁定。这样只要不在作用域范围内,锁就会释放,可以避免上述问题。当两个线程访问不带锁的共享资源时,如下代码。还有一种计时锁,设定在多少时间内进行锁定。这时我们需要加锁来限制。显然结果是不正确的。

2025-03-10 20:43:11 554

原创 c++介绍锁 一

可以使用一次性分配所有资源方法,即线程一次申请它所需要的所有资源,只有在所有资源都满足情况下才开始执行,否则就释放已经获得的资源重新申请。3.破坏不剥夺条件:如果一个线程申请新的资源时已持有的资源被占用,可以强制释放它已占有的资源。4.使用死锁检测和恢复:系统可以定期检测是否存在死锁,如果检测到死锁,即采取恢复措施,例如,终止某些线程并且释放它们占有资源。: 已获得的资源在未使用完之前,不能被强行剥夺,只能使用完毕后由线程自己释放。:线程已经持有至少一个资源,同时又申请新的资源,而新资源被其他线程占有。

2025-03-10 20:20:09 525

原创 pat甲级1002 A+B for Polynomials

这道题又搞了一个多小时,多项式和为0 的时候没考虑到。另一个卡的时间最长的就是格式上,本想用cout实现,没成功,最后用printf.

2025-03-03 21:59:48 266

原创 pat 甲级 1001 A+B Format

这题做了一个小时主要卡在题意理解错误,第二写代码时考虑不到位。蓝色部分字体我理解成了分成三组,而题目意思是,每三个数字分成一组。后面卡到测试点2和8了 是因为我在第一个if里输出了strSum[0],没有考虑到后面对else内容的影响。

2025-03-03 19:57:36 207

原创 Qt之QPainter使用绘制一个矩形

【代码】Qt之QPainter使用绘制一个矩形。

2025-02-01 20:36:51 164

原创 Qt之数据库操作三

主要介绍qt框架中对数据库的增加,删除和修改功能。tdialogdata.cpp中代码。MainWindow.cpp中的代。tdialogdata.h中代码。MainWindow.h中的代码。

2025-02-01 17:50:02 423

原创 qt之数据库的使用二

在上一篇qt之数据库的文章基础上增加了数据库的查询功能,软件界面上增加了首记录,前一条,后一条,尾记录按钮。当selectModel索引 位置发生变化时,照片和备注的的变化需要 单独一个槽函数去响应。refreshTableView() 作用是刷新slectModel 当前位置。第一步,进行数据库连接并查询数据库,代码如下。本章主要介绍qt的数据库的查询功能。MainWindow.h如下。记录按钮功能程序实现如下。

2025-01-31 11:09:54 533

原创 Qt之数据库的使用一

qt框架中包含m/v结构 m指的是model(模型),v指的是view(视图)。这样可以使界面和数据分离开来。每当数据更新时,不会影响界面组件。数据库连接成功,数据读取后在tableview中和当前记录组件展示(tableView中性别和部门使用了代理类)。主要功能从数据库中读取数据,使用tableView进行显示。程序分析window.h部分程序。数显设置和数据库连接。

2025-01-30 18:32:15 525

原创 qt之读写二进制文件(序列化方式)

除文本文件外,其他文件都可以看做是二进制文件,可以单独使用QFile读写二进制文件,但一般结合使用QFile和QDataStream读写二进制文件。cpp中主要实现代码。

2025-01-17 20:47:18 422

原创 Qt之文件系统操作和读写

qt文件系统操作及文件读写功能。qt对文本文件打开和保存功能

2025-01-17 15:16:24 387

原创 Qt之登录界面(splash)

Qt之软件登陆界面设计

2025-01-16 11:35:22 320

原创 Qt应用之MDI(多文档设计)

Qt多窗口设置,Qt中MDI使用,Qt文本编辑器设计

2025-01-15 22:30:00 554

原创 pat乙级1112 超标区间

上图是用某科学研究中采集的数据绘制成的折线图,其中红色横线表示正常数据的阈值(在此图中阈值是 25)。你的任务就是把超出阈值的非正常数据所在的区间找出来。例如上图中横轴 [3, 5] 区间中的 3 个数据点超标,横轴上点 9 (可以表示为区间 [9, 9])对应的数据点也超标。

2025-01-05 14:01:19 191

原创 pat乙级1111 对称日

央视新闻发了一条微博,指出 2020 年有个罕见的“对称日”,即 2020 年 2 月 2 日,按照年年年年月月日日格式组成的字符串 20200202 是完全对称的。给定任意一个日期,本题就请你写程序判断一下,这是不是一个对称日?

2025-01-05 11:51:29 222

原创 pat 乙级1110 区块反转

给定一个单链表 L,我们将每 K 个结点看成一个(链表最后若不足 K 个结点,也看成一个区块),请编写程序将 L 中所有区块的链接反转。例如:给定 L 为 1→2→3→4→5→6→7→8,K 为 3,则输出应该为 7→8→4→5→6→1→2→3。

2025-01-05 10:57:17 240

原创 pat乙级1109 擅长C

当你被面试官要求用 C 写一个“Hello World”时,有本事像下图显示的那样写一个出来吗?

2025-01-05 01:32:18 270

原创 PAT乙级1108String复读机

给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按(注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按String的顺序打印,直到所有字符都被输出。例如gnirtSSs要调整成StringS输出,其中s是多余字符被忽略。

2025-01-04 20:34:41 102

mfc140ud.dll msvcp140d.dll ucrtbased,dll vcruntime140d.dll

windows系统自带核心库

2024-10-11

GenICam 协议GenTL模块 头文件GenTL.h

GenICam 协议GenTL模块 头文件GenTL.h

2024-03-15

飞天诚信 Rockey-ARM 系列母锁制作升级介绍

飞天诚信 Rockey-ARM 系列母锁制作升级过程

2023-11-01

编译rknn_demo所缺少的库和头文件及 cmakelists.txt

编译瑞芯微sdk所包含的rknn_demo所缺少的库及头文件整理及cmakelist.txt修改

2019-05-06

CH341驱动_USB转串口CH340驱动

单片机80c51系列的usb转串口 驱动,亲测有效,欢迎下载使用

2019-03-15

OpenBLAS-develop-Linux64.zip

OpenBLAS-develop-Linux64.zip

2018-12-18

ubunu14.04下NanoPC-T3plus串口程序源码

ubunu14.04我是用的是NanoPC-T3plus 串口UART0,串口程序源码;

2018-12-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除