- 博客(28)
- 收藏
- 关注
原创 C++单例模式
单例:一个类只能创建一个对象实现步骤:1.将构造函数声明为类的私有成员 private;2.通过静态成员函数申请对象空间 ,并返回地址;3.定义一个静态变量标记,记录对象的个数,该静态成员变量是开关变量,通过控制这个静态标记达到控制只创建一个对象的目的;4.在析构函数中,将静态变量标记置成1,达到重复利用该静态变量标记目的;源代码:#include <iostream>using namespace std;// 单例模式,一个类只能创建一个对象class
2022-03-28 22:56:52
771
原创 Qt 多线程实现网络发送文件小功能
客户端给服务器发送文件,服务器进行接收文件的简单操作1. 服务器 1. 创建QTcpServer 类的对象QTcpServer * server = new QTcpServer(this); 2. 进行监听bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) 3. 通过接收 QTcpServer 发出的...
2021-09-28 16:31:09
1213
1
原创 Qt 简易版群聊器小功能
1. 群成员界面设计:在 signin.cpp 中的构造函数中 创建按钮// 1. 设置窗口名字、图标 this->setWindowTitle("QQ群聊器"); this->setWindowIcon(QIcon(":/img/qq_副本.png")); // 创建两个容器 分别存放网名 图片名 QList<QString> nameList; // 网名列表 nameList << "星..
2021-09-23 16:21:05
800
原创 Qt 视频播放器
1. 界面布局:2. 调用 API 播放视频加载视频播放模板在 widget.h 中widget.cpp 中// 在构造函数处编写代码 // 实例化播放视频对象 this->player = new QMediaPlayer(this); // 实例化播放视频框框 this->videoWidget = new QVideoWidget(this); // 设置播放视频框框的大小 this->video...
2021-09-22 15:59:31
1318
原创 Qt 制作简易版音乐播放器
1. 界面设计:2. 设置背景图片// 1.重写绘图事件void Widget::paintEvent(QPaintEvent *event){ // 声明画家 QPainter painter(this); QPixmap pix = QString(":/img/002.jpeg"); // 设置图片伸缩 pix.scaled(this->width(), this->height()); // 贴背景图片 paint
2021-09-20 16:15:05
1327
原创 两个栈实现一个队列的功能
1. 栈:是限制的线性表插入删除必须在同一端完成。栈的特点:先进后出:入栈将数据沉入栈底,最上面的一个数据是栈顶,获取栈顶元素Top,之后要进行Pop 删除栈顶,才可以取到第二个数据。2. 队列:也是对线性表的一种限定,规定插入删除数据必须在异端完成。队列的特点: 先进先出,存数据的一端叫队尾,出数据的一端叫队头;入队:存数据; 出队:删除数据3. 利用两个栈实现一个队列的功能 -- 思路:...
2021-09-06 09:44:24
479
原创 平衡二叉树
4种旋转操作:1. 左左旋(LL)2. 左右旋(LR)3. 右右旋(RR)4. 右左旋(RL)创建二叉树实现下图操作:实现代码:#include <stdio.h>#include <stdlib.h>// 平衡二叉树,首先是有序二叉树,任意子树的高度差都小于等于1。// 定义二叉树节点结构体 typedef struct TreeNode{ int data; // 数据域 int height; // 记录...
2021-08-28 15:13:26
138
原创 UDP/IP 异步选择模型
实现步骤:异步选择模型是基于Windows消息机制的,也就是消息队列,Windows操作系统会为每个窗口创建一个消息队列并且维护1. 创建窗口: 创建窗口步骤: 第一步:创建窗口结构体:typedef struct tagWNDCLASSEXW { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int ...
2021-08-26 15:12:37
193
原创 二叉树遍历
有二叉树如下图:实现前序遍历(根左右): 1 2 4 3 5 7 8 9 6实现中序遍历(左根右): 4 2 1 7 5 9 8 3 6实现后序遍历(左右根): 4 2 7 9 8 5 6 3 1实现层...
2021-08-25 12:48:53
102
原创 UDP/IP 事件选择模型
事件选择模型核心:为每一个socket创建一个事件对象,将socket和对应的事件对象绑定到一起,并投递给操作系统,由操作系统帮我们进行监视,当对应的socket有响应,该对应的事件会被置成有信号,我们获取该信号,进行分类处理。UDP/IP 事件选择模型:UDP/IP 是面向非连接的,不可靠的,基于数据报的传输层协议;对于服务端只有一个socket(服务端socket),直接创建一个事件对象,将该socket和对应的事件对象进行绑定,并投递给系统,之后等待信号,获取信号,之后进行分类处理。
2021-08-24 11:11:16
373
原创 UDP/IP select模型
select模型服务端代码:UDP/IP: UDP/IP协议的C/S模型不存在傻等的问题,而select模型只是能让recvfrom更灵活一些 select 代码逻辑: 1.所有的socket装进一个集合FD_SET UDP只有一个socket即将服务端的socket装进集合中就可以了 2.通过select函数,检测中的socket集合中...
2021-08-21 15:20:41
650
原创 二叉树实现
中序遍历实现数组元素排序struct data arr[6] = { 100, "aa", 50, "bb", 40, "cc", 120, "dd", 110, "oo", 130, "qq" };实现输出:arr[6] = { 40, "cc", 50, "bb",100, "aa", 110, "oo", 120, "dd", 130, "qq" };代码:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#in.
2021-08-21 11:05:27
81
原创 UDP/IP 基本C/S模型
UDP/IP 与 TCP/IP的区别:TCP/IP协议的特点: 面向连接的,可靠的,基于字节流的传输层协议。UDP/IP协议的特点: 面向非连接的,不可靠的,基于数据报的传输层协议。基本C/S模型 TCP/IP 服务端与客户端是 1对1关系;UDP/IP 服务端与客户端 可以是1对1,1对多 关系。基本C/S模型中服务端代码: UDP/IP: 是面向非连接的,所以不进行listen、a...
2021-08-20 15:40:31
279
原创 二叉树的存与遍历
实现如下图的中序遍历利用栈实现中序遍历:声明二维数组 类型为 struct treeNode* 定义一个移动的指针节点,记录要遍历的节点进行入栈、出栈代码:#include <stdio.h>#include <stdlib.h>/* 二叉树:是树形结构的一个重要类型 二叉树特点:是每个节点最多只能有两颗子树,且有左右之分 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root) 的元素以及两不相交的、被分别称为左子树和.
2021-08-20 10:18:30
120
原创 队列 -- 双向循环链表实现
代码:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/* 队列--双向循环链表实现 通过对线性表的插入删除操作在异端完成 比如: 头插入对应的是尾删除 尾插入对应的是头删除 出数据的一端是队头,进数据的是队尾 栈: 先进后出 队列: 先进先出*/// 创建双向循环链表节点struct Node{ int a; struct Node* pPr.
2021-08-19 10:50:07
342
1
原创 TCP/IP 完成端口
完成端口是对重叠IO的直接优化在重叠IO上进行优化:1.创建完成端口HANDLE WINAPI CreateIoCompletionPort( _In_ HANDLE FileHandle, // 填 INVALID_HANDLE_VALUE _In_opt_ HANDLE ExistingCompletionPort, // 对现有i/o完成端口或空的句柄。 填NULL _In_ ULONG_PTR CompletionKey, // 填0
2021-08-18 16:06:22
255
原创 栈--双向循环链表实现
代码:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/* 栈 用双向循环链表实现栈 栈:是通过对线性表的插入删除操作在同一端完成(头添加,头删除 或者 尾添加,尾删除) 栈的特点: 先进先出 操作的一端叫栈顶,另一端叫栈底 栈的功能: 1.创建栈 stack 【C语言就是一个栈指针,相当于链表的头或者尾指针】 2.判断栈是否为空 isEmpty 【一.
2021-08-18 10:13:56
691
原创 重叠IO之完成例程
重叠IO事件通知与完成例程的区别:重叠IO事件通知:需要调用 WSAGetOverlappedResult,获取等到事件的结果,然后根据逻辑,进行分类处理;重叠IO完成例程:主要是通过处理WSARecv函数的回调函数,和处理WSASend函数的回调函数,不用进行循环去获取等待事件的结果,系统会自动调用回调函数进行处理,完成例程的性能更好回调函数:void CALLBACK CompletionROUTINE( IN DWORD dwError, // 错
2021-08-13 15:10:15
500
原创 俄罗斯方块
俄罗斯方块实现步骤:1.创建Win32窗口1.创建窗口结构体typedef struct tagWNDCLASSEXA { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH
2021-08-12 21:59:47
352
原创 重叠IO之事件通知
重叠IO: 重叠IO是Windows提供的一种异步读写文件的机制 正常读写文件(socket本质就是文件操作),如recv,是阻塞的, 等协议缓存区中的数据全部复制进行自定义的buffer字符数组里, 函数才结束并返回复制的个数,写也一样,同一时间只能读写一个,其他的都被阻塞, 只能等读写操作完成之后阻塞才被解除 重叠IO机制读写,将读的指令以及自定义的buffer投给操作系统,然后函数直接返回,操作系统独立开个线程,...
2021-08-12 10:55:41
170
原创 TCP/IP网络模型之异步选择模型
异步选择模型是基于窗口实现窗口的创建如下:1.创建窗口结构体typedef struct tagWNDCLASSEXW { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH
2021-08-04 15:19:45
275
原创 TCP/IP 事件选择模型
服务端:1.打开网络库int WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);2.校验版本号2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion) // (检验版本号是 2.2)3.创建socket 套接字SOCKET socket(int af, int type, int protocol);4.绑定地址与端口号int bind(.
2021-08-01 15:12:00
344
原创 C语言 函数返回二维数组
#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 5double** Link(double a, double b, double c, double d){ double** T = NULL; T = (double**)malloc(sizeof(double*)*N); if (NULL == T) return NULL; // 定义一个二维数组,为.
2021-07-30 12:59:16
3716
原创 TCP/IP select模型
select模型适用于服务端服务端:1.打开网络库int WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);2.检验版本号2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion) // (检验版本号是 2.2)3.创建socket 套接字SOCKET socket(int af, int type, int protocol);4.绑定地址与
2021-07-25 14:49:41
437
3
原创 TCP/IP 基本C/S模型
服务端与客户端通信服务端:1.打开网络库int WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);2.检验版本号2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion) (检验版本号是 2.2)3.创建socket 套接字SOCKET socket(int af, int type, int protocol);4.绑定地址与端口号int bi.
2021-07-23 13:38:54
193
原创 C++ 实现简陋版贪吃蛇
wall.h 文件:#pragma once#include <iostream>using namespace std;// 创建游戏墙壁的类class Wall{public: // 利用枚举设置墙的宽和高 enum { ROW = 26, COL = 26 }; // 声明初始化墙壁函数 void InitWall(); // 声明设置当前所在位置的符号的函数 void setWall(int x, int y, char c); //参数.
2021-07-20 16:02:08
204
原创 练习STL容器
演讲比赛小程序#include <iostream>#include <vector>#include <map>#include <algorithm>#include <deque>#include <numeric>#include <ctime>using namespace std;/* 演讲比赛 总共3轮比赛 总共有 ABCDEFGHIJKLMNOPQRSTUVWX 位选手 选
2021-07-14 11:12:06
106
空空如也
海康摄像头鉴权不通问题
2023-05-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人