- 博客(106)
- 收藏
- 关注
原创 复习——C++
输出*p,为abc;输出p,默认为char*类型,输出为abc,因为字符串末尾自带\0,不输出乱码;输出(void*)类型,将指针p强制转换为void*类型,cout会输出该指针的值(即字符串常量"abc"的首地址)输出*p,是输出p的空间内的值;输出p,由于默认规则,会输出p是char*类型,cout会将其解释为C风格字符串,输出字符串,同时,由于没有‘\0’,会一直向后输出,因此输出为a加乱码。取地址,把b的地址给p。
2025-06-04 18:24:19
195
原创 仿腾讯会议——优化:多条tcp连接
摘要:系统功能扩展主要包括三个方面:1) 新增用户信息数据结构;2) 添加视频音频注册的结构体;3) 实现了视频音频注册功能函数。这些改进完善了系统的用户管理和多媒体处理能力。
2025-05-30 11:05:32
140
原创 力扣——哈希——1.两数之和
如果不存在,因为这是数组内的第i个值,所以哈希表的值就是i,索引是具体的值,如hashtable[nums[i]]=i;,里面的i是在查看nums数组内的第i个值。查询标准值减去当前正在查的值的差在哈希表中是否存在,如果存在,说明这一对就是要找的值。find——>ite->first—>键值;ite->second—>索引。使用哈希表,遍历map表。
2025-05-28 16:51:33
237
原创 仿腾讯会议——视频发送接收
本文介绍了多媒体处理模块的开发流程,主要包括音频和视频功能的实现。首先,添加音频模块并完成初始化,随后处理视频相关功能,包括视频帧的刷新、等比例缩放、新建视频对象等。在中介者模式中定义了发送视频帧的函数,并实现了视频的开启、关闭及信号槽绑定。此外,完成了视频帧的压缩与发送功能,确保数据传输效率。图片刷新功能也得到完善,支持根据ID刷新图片显示。最后,实现了加入房间时的音频和视频初始化,以及退出房间时的视频关闭功能。整个模块的开发注重功能完整性和性能优化。
2025-05-22 11:48:56
254
原创 仿腾讯会议——添加音频
本文介绍了音频处理功能的实现步骤。首先,通过定义信号和信号槽连接,实现了音频的开启、关闭、开始和暂停功能。其次,初始化音频视频资源,并为每个用户创建独立的音频播放对象,确保跨线程操作时资源不被立即回收。音频处理部分包括定义和实现音频处理逻辑,确保音频数据的正确传输和处理。在用户离开房间或退出会议时,系统会自动去除对应的音频资源并回收相关资源,避免内存泄漏和资源浪费。整个流程通过对象ba发送音频数据,确保跨线程操作的稳定性。
2025-05-19 18:52:25
631
原创 仿腾讯会议——音频服务器部分
本文介绍了音频处理系统的设计与实现流程。首先,中介者模块定义了处理音频帧的函数接口,并实现了具体的音频帧处理逻辑。接着,系统通过绑定函数映射,将中介者模块与服务器模块进行关联。服务器模块随后定义了音频处理的高层函数接口,并基于中介者模块的功能实现了具体的音频处理逻辑。整个设计采用模块化思想,通过中介者模式解耦了音频处理的不同层次,提高了系统的可维护性和扩展性。
2025-05-19 13:26:01
537
原创 仿腾讯会议——退出房间
本文摘要:客户端方面,主要实现了绘图成员的添加、视频重绘事件的处理、关闭函数的定义与实现,以及清空列表功能。同时,在房间内添加了用户映射表,并处理了中介者退出、用户移除、展示界面离开及房间请求等操作。服务端方面,未提供具体实现细节,但应确保与客户端的通信和数据同步。整体上,文章围绕客户端功能扩展与优化展开,旨在提升用户体验和系统稳定性。
2025-05-18 19:51:17
418
原创 仿腾讯会议——房间界面&用户设置
本文概述了一个软件开发项目的关键步骤,主要涉及用户界面和功能的实现。首先,进行了房间界面的基本设置,随后添加了新的设计师界面类,以增强用户体验。接着,设置了用户配置选项,并新增了类以管理房间标题。此外,还配置了控件,修改了用户展示的头文件,并设置了用户名。在客户端,添加了用户展示功能,最后进行了数据测试以确保所有功能的正确性和稳定性。这些步骤共同构成了一个完整的用户界面和功能开发流程。
2025-05-18 16:25:44
531
原创 力扣——206.反转链表&&倒序输出链表
更新前一个节点和当前节点——前一个节点设为当前节点,当前节点设为下一个节点。改变当前节点的指向——将当前节点的下一个设为指向前一个节点。先给下一个节点赋值为——当前节点的下一个。设三个指针,前后两个指针都为空,当前指针为输入的头指针。开始循环——判断条件为当前节点不为空。
2025-04-29 20:48:19
316
原创 仿腾讯会议——服务器注释
进入mysql——>mysql -u root -p。展示所有数据库——>show databases;使用某个数据库——>use WeChat。展示数据库——>show tables;修改配置文件后,将编码改为utf8。打开一个新终端,打开文件。
2025-04-29 20:07:42
466
原创 项目班——0419——chrono时间库
C++11时间库chrono源自于boost1.时间间隔 duration2.时间点 timepoint3.时钟 clock系统时钟system_clock,稳定时钟steady_clock,高精度时钟high_resolution_clock。
2025-04-24 18:06:39
369
原创 项目班——0415——条件变量&&基于条件变量的多线程同步实例
与互斥锁组合使用的东西,条件变量包含头文件#include<condition_variable>condition_variable初始化不用单独调用函数实现,在构造里实现回收同理,在析构里实现wait等——wait_for wait_util可以防止条件,以及时间,避免死锁notify通知——notify_one notify_all可以结合互斥锁,实现线程同步,完成一些如生产者、消费者模型这样的功能1.涉及到的概念:有若干生产者,若干消费者,同步队列(阻塞队列,环形队列),
2025-04-21 14:29:15
711
原创 仿腾讯会议——设置配置文件
运行出现设置的IP, 找到运行的配置文件,修改成自己当前的ip。再次运行,连接迅速,并且出现接收回复,输出当前IP。3、修改配置文件内的ip地址。2、实现初始化配置的函数。将函数运行条件改成非。
2025-04-18 12:08:34
220
原创 仿腾讯会议——界面关闭功能实现
在WeChatDialog.cpp内实现closeEvent函数。原本的函数是先创建一个程序,然后在主程序内创建窗口。#include<QMessageBox>引入窗口。在Ckernel.cpp内实现信号和槽函数的绑定。添加一个控制类Ckernel。将其修改为在控制类内创建界面。
2025-04-18 11:47:51
372
原创 项目班——0412——C++多线程
arg1是可调用对象(函数指针,仿函数,lambda表达式,function&bind),后面是参数列表注:arg1可以是类中的成员函数(普通的),arg2此时就要传对象的地址。
2025-04-18 11:39:01
328
原创 项目班——0412——lambda表达式&&QThread和信号槽区别
每次使用时,都去上面定义一个函数比较麻烦,因此可以使用lambda表达式定义一个匿名函数,在函数定义里面完成另一个函数的定义,简化开发流程。因为插入排序能够保持稳定性,其次部分有序时,可以有一个最优的时间复杂度O(n)如果想实现从大到小的排序,comp(a,b)为真,保持顺序,所以是从大到小的。为引用捕获是多余的,会导致重复捕获,因此语法不允许。为值捕获是多余的,会导致重复捕获,因此语法不允许。2、数量较大时,使用快排。已经表示默认以引用捕获所有外部变量,包括。已经表示默认以值捕获所有外部变量,包括。
2025-04-14 20:56:54
465
原创 项目班——0408——qt的多线程开发
可能在接受某个信号时被阻塞住了,不能接受其他事件了,比如刚打开项目就无响应,可能是连接服务器时ip地址写错了,或者连不上服务器。如果connect函数写了两遍,会导致槽函数执行两遍,如果加上第五个参数,就可以保证只执行一遍。pb_test是在主线程内创建的,在自己定义的线程内将其隐藏,会触发隐藏事件,事件循环会出错。发送信号的对象:必须是Q_OBJECT的子类,类的定义中,必须包含Q_OBJECT宏。connect参数:发送对象地址,发送的信号,接收者对象地址,处理槽函数地址,//获取id,通过这个获取。
2025-04-14 19:53:52
1344
原创 笔试面试——逻辑题
小明走进房间,发现所有灯全熄着,;3. S先生,P先生,Q先生他们知道桌子的抽屉里面有16张扑克牌,红桃A,Q,4 , 黑桃 J,8,4,2,7,3 草花 K,Q,5,4,6 方块 A,5。活动内容除了吃喝玩之外。8.1,3,9,10,经过(1+10)*3-9即可等于24,那么,1,7,8,8,10如何利用+-*/等于24____________________.。8. 套马,有25匹马,每次只能5匹马进行比赛,比赛只能得到5匹马之间的快慢程度,而不是速度,请问,最少要比几次,才能获得最快的前5匹马()
2025-02-12 19:21:20
483
原创 C++习题1——24、30—
这是不正确的,因为友元函数不是类的成员,这种改动会改变类的接口,导致二进制不兼容__declspec(dllexport) 是Microsoft Visual C++中的一个特定于编译器的扩展,它用于在编译时指示编译器,随后的声明或定义应该被导出,使其在生成的动态链接库(DLL)中对外部可见。是错误的,因为它的语法不正确。所以输出为(1)temp的无参构造(5)类型转换,形参的有参构造(2)返回值(临时对象)的拷贝构造(4)形参的回收(3)临时对象给temp赋值(4)临时对象的回收(4)temp的回收。
2025-02-12 19:14:12
743
原创 C++习题1——1—11
7、两个互相独立的类classA和classB,都各自定义了非静态的公有成员函数PublicFunc()和非静态的私有成员函数PrivateFunc();D正确 多继承:一个子类存在多个父类,子类同时含有多个父类的特性,子类可能存在多个虚表,派生类自己的虚函数会被添加到第一个直接基类的虚表中。B 父类指针指向子类对象,如果是虚函数,就是子类的,不是,就是父类的。A)类中的成员默认是private的,但是可以声明为public。成员函数在A类里,因此A类里的都可以用,B类里的只能用公有的。
2025-02-11 20:55:45
799
原创 C语言面试题1——1—20
strcpy(a,b),如果b的长度大于a能存的空间长度,就会溢出,也就是这个函数没有识别目标缓冲区长度的功能。大小端避免方式:识别大小端是否一致,写判断大小端的函数,如果大小端不一致,写一个转换大小端的函数,进行转换。如果在外面定义一个全局整型变量g_val,想在main中再定义一个,先使用{},int+变量名再次定义。(3)使用do{ }while(0);PFUN为指向函数的指针类型的新名称,PFUN为int(*) (int,int)的别名。
2025-02-10 16:10:20
917
原创 Leetcode——链表:143.重排链表
设置循环处理全部链表中的节点,将当前元素的后继改为原链表的前驱(此时当前元素与原链表的后继断开,造成后继链表中全部节点丢失)更新三个变量,处理下一个节点,将当前元素变为prev,将next改为当前元素,将next向后移动一个节点。找到中间位置,将后半部分的链表翻转,得到新链表,将后半部分链表的节点交替插入原链表。先将第二个链表的头节点插入第一个链表中,尾向后移动,第二个链表的头节点向后移动。当移动到最后一个元素时,把当前节点直接插入到原链表的头,更新并返回新链表的头。传出值:后半部分链表的头节点。
2025-01-17 16:06:48
777
原创 数据结构与算法——1202—排序&&递归
如果有序元素比当前保存的元素大,那么说明当前保存的元素应该再向前比较,有序元素应该向后移动一个,再重复当前步骤。如果遍历有序元素的下标到达-1的位置上,应该把当前元素放在有序元素数组下标为0的位置上。(2)从右向左遍历有序数组,比较有序元素和当前元素的大小关系。插入排序是一个元素从无序数组向有序数组中插入的过程。4、计算结果会沿着原路依次返回。如果有序元素小,此次遍历结束。1、解决方案完全相同。3、必须有明确的终点。
2024-12-06 15:07:34
267
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人