自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 数据结构和算法

这种在“查”和“增删”之间的卓越权衡(Trade-off),使它成为构建大型、高效、综合性系统的底层数据结构的首选,这就是它如此重要的根本原因。红黑树为了降低维护平衡的成本,放松了平衡标准,这导致了树的最大高度可能比AVL树更高,从而在最坏情况下需要更多的比较次数才能找到目标节点。3.二叉排序树(BST):左子树上所有结点的值均小于根结点的值;3.红黑树中,叶子结点不存储数据,而是指向空(NIL)的黑结点,这简化了边界条件的处理。4.不存在两个相邻的红色结点(即红色结点的父结点和孩子结点必须是黑色的)。

2025-09-24 20:34:17 817

原创 文件I/O与I/O多路复用

1.select 的核心作用是:允许一个进程(或线程)同时监视多个文件描述符(File Descriptor, FD),等待其中一个或多个 FD 变得“可读”、“可写”或“发生异常”,然后通知程序进行相应的读写操作。当事件就绪时,epoll_wait 调用返回,它只给你一个装满就绪事件的数组,这个数组的大小恰好就是就绪 FD 的数量。epoll_create1: 创建一个 epoll 实例,返回一个文件描述符(epfd),用于管理所有待监视的 FD。防止资源泄漏,每个打开的文件描述符都会占用系统资源。

2025-09-06 22:53:47 631

原创 线程与同步

在 C 语言中,线程的创建与管理主要通过 POSIX 线程库(pthread) 实现,核心函数包括 pthread_create(创建线程)、pthread_join(等待线程结束)、pthread_exit(线程退出),并可通过线程属性控制线程的行为(如分离态)。线程级信号量(无名信号量)是计数型同步工具,可用于线程间的互斥(计数 = 1)或资源计数(如缓冲区空位数量),比 “互斥锁 + 条件变量” 更简洁,适合简单场景。初始化线程属性:pthread_attr_init。

2025-09-03 21:53:07 714

原创 进程管理和IPC

共享内存(Shared Memory)是效率最高的进程间通信(IPC)机制,其核心原理是让多个进程直接访问同一块内核管理的内存区域,避免了数据在用户态与内核态之间的拷贝(如管道、消息队列的数据传递都需要内核中转),因此特别适合高频、大量数据的交换场景(如视频处理、实时数据共享)。fork() 是 Unix/Linux 系统中最核心的系统调用之一,其核心作用是创建一个与当前进程(父进程)几乎完全相同的新进程(子进程),从而实现进程的 “复制式” 并发。

2025-09-03 21:23:52 900

原创 工作心得总结(不断更新)

实际开发和设计不符,先考虑清楚业务逻辑,采用金字塔/步骤方法考虑。开发异常判断,实际开发做判空等处理,不应影响开发效率。不知道原理,graphicsView映射关系,无法去解决问题,只会在问题周边打转。新增结构体能复用sdk的复用sdk的,搞多套结构体涉及转换,增加开发工作量。类中不能随意添加函数,应该根据类的职责划分,类的职责不应过多。当阅读代码时需要上下滚动屏幕才能理解逻辑,就应立即拆分函数。5.有不懂的,不管是什么,必须抽时间搞懂,急者走不远。2.对象式代码 对象(数据+行为)

2025-07-20 17:22:42 330

原创 qt 信号和槽

QObject::connect() 函数有不同的连接类型,如 Qt::DirectConnection(直接连接,信号发出时立即调用槽函数)、Qt::QueuedConnection(队列连接,信号发出后,槽函数在接收者所在线程的事件循环中被调用)、Qt::BlockingQueuedConnection(阻塞队列连接,类似队列连接,但会阻塞发送者线程直到槽函数执行完毕)等。当一个对象的状态发生变化时,它可以发出一个信号,其他对象可以连接这个信号到一个槽函数,当信号发出时,槽函数会被调用。

2025-07-03 21:55:27 489

原创 Qt 事件

在 Qt 里,事件是对程序运行时所发生的各类状况的抽象表示。在 Qt 中常见的事件类型如下:1.用户输入事件:1.鼠标事件:QMouseEvent 涵盖鼠标按下、释放、移动、双击等操作;QWheelEvent 处理鼠标滚轮滚动。2.键盘事件:QKeyEvent 处理键盘按键的按下和释放。2.窗口和控件事件:1.窗口事件:QResizeEvent 在窗口大小改变时触发;QMoveEvent 窗口位置移动时产生;QCloseEvent 尝试关闭窗口时触发。

2025-07-03 21:54:35 900

原创 C++ 智能指针

STL和智能指针关系1.STL 是标准库的子集:专注于数据结构与算法。2.智能指针属于 “通用工具库”:与 std::thread、std::future 等工具同属一类,不隶属于 STL 的核心组件。

2025-06-10 23:55:10 450

原创 STL 6分配器

在 C++ STL 分配器中,rebind 是一个必须实现的嵌套模板结构体,其核心作用是允许分配器为不同类型的对象创建适配版本。这是分配器设计中的一个关键机制,用于处理容器内部可能需要的不同类型的内存分配。通过类型别名,分配器将这些信息暴露给容器和算法,使它们能够在不依赖具体实现的情况下正确操作内存。3.类型抽象:使容器与具体内存管理解耦,支持不同的内存策略。3.大小和距离的类型:如何表示内存块的大小和指针间的距离?2.内存池分配器:为固定大小的对象优化内存分配。1.分配器的核心功能。

2025-06-10 23:48:20 326

原创 STL 5 适配器

STL 适配器是一类特殊的组件,用于修改其他组件的接口,使其适配特定场景。它们本身不提供完整功能,而是通过包装现有组件来改变其行为。

2025-06-10 23:43:22 605

原创 STL 4函数对象

函数对象(Functor)是 C++ STL 的核心概念之一,它允许类实例像函数一样被调用。

2025-06-10 23:33:19 245

原创 STL 3算法

1.例如,std::sort 要求随机访问迭代器,因此无法用于 list(需用 list::sort)。2.算法复杂度影响性能:std::binary_search 的 O (log n) 复杂度依赖于有序序列和随机访问迭代器。

2025-06-10 23:21:39 603

原创 STL 2迭代器

2.统一接口:通过迭代器,算法可以操作任意容器(如 vector、list、map),无需关心容器的底层实现。1.双向迭代器的全部操作:自增(++)、自减(–)、解引用读写(*it、*it = value)。1.前向迭代器的全部操作:自增(++)、解引用读写(*it、*it = value)、多次遍历。2.随机位置跳转:支持 +=、-=、+、- 操作(如 it += 5 直接跳到第 5 个位置)。1.输入迭代器的全部操作:自增(++)、解引用读取(*it)、相等比较(==/!

2025-06-09 22:03:20 714

原创 STL 1 容器

STL 的核心思想是将算法与数据结构分离,通过模板让两者都能独立于具体数据类型,从而实现 “一次编写,多场景复用”。

2025-06-09 21:40:57 988

原创 C++ 重载和模板

其核心作用是让自定义类型(如类、结构体)能够像内置类型一样使用运算符(如+, ==, <<)或进行类型转换。在模板内部,当引用依赖于模板参数的嵌套类型时,必须使用 typename 标识这是一个类型(而非变量或函数)。模板(Templates) 是一种泛型编程机制,允许你编写与类型无关的代码,从而实现高度可复用的组件。operator关键字后接运算符符号(如+, -, []),用于定义自定义类型的运算符行为。1.可重载的运算符:如+, -, *, /, ==, [], (), <<, >>等。

2025-06-05 20:11:28 701

原创 C++类二

当类使用虚继承时,其对象内存布局中会包含一个虚基类指针(vbptr),该指针指向一个虚基类表(VBT,Virtual Base Table)。4.基类与派生类不共享 VTable:VTable 是类级别的,不同类的 VTable 即使内容相同也不共享。继承是面向对象编程的核心特性,允许一个类(派生类 / 子类)继承另一个类(基类 / 父类)的属性和方法。当通过基类指针删除派生类对象时,若基类析构函数不是虚函数,只会调用基类的析构函数,导致派生类资源泄漏。当前类到间接虚基类的偏移量(如菱形继承中的共同基类)

2025-06-05 19:42:05 808

原创 C++ 类一

类(Class) 是 C++ 中实现面向对象编程(OOP)的核心机制,它将数据(成员变量)和操作数据的函数(成员函数)封装在一起,形成一个独立的实体。其他:如果类的析构函数、拷贝构造函数或拷贝赋值运算符被显式删除(= delete),默认构造函数可能被隐式删除(取决于具体编译器实现)。2.被隐式删除:类有引用成员或const成员或没有默认构造函数的类类型成员。2.被隐式删除:类有引用成员或 **const成员 ** + 扩充。2.被隐式删除:类有引用成员或 **const成员 ** + 扩充。

2025-06-04 23:22:29 605

原创 C++ 变量三

1、结构体:是一种用户自定义的数据类型,可将不同类型的数据组合成一个逻辑单元。2、成员变量:构成结构体的数据元素。3、访问方式:通过点运算符(.)访问成员。

2025-06-04 21:37:10 817

原创 C++ 变量二

1.声明:告诉编译器变量的存在(如extern int x;),不分配内存。2.定义:为变量分配内存并可初始化(如int x = 0;

2025-06-04 19:59:34 948

原创 C++ 变量一

RTTI(Run-Time Type Information,运行时类型信息)是 C++ 提供的一种机制,允许程序在运行时获取对象的类型信息。使用场景:需要将基类指针 / 引用安全地转换为派生类指针 / 引用,且必须在运行时验证对象的实际类型时,使用 dynamic_cast。2、值类型的向下转型(将基类对象直接转换为派生类对象)是被禁止的,会编译报错。显式转换要求开发者主动声明转换行为,迫使思考转换的合理性,避免 “意外转换”。1、隐式类型转换都使用,在继承层级内的指针/引用转换(不进行运行时检查)。

2025-06-03 20:19:45 892

原创 Qt 窗口部件(2)输入部件详解

QLineEdit(单行文本输入)QTextEdit(多行富文本编辑)QSpinBox/QDoubleSpinBox(数值输入框)QComboBox(下拉选择框)QSlider/QDial(滑块和旋钮)QCheckBox/QRadioButton(复选框和单选按钮)QLineEdit 主要用于接收用户的单行文本输入,具备文本显示、编辑、验证和格式化等功能。使用setInputMask()限制输入格式_");1、格式说明:占位符9表示只能输入数字,分号;

2025-05-11 16:21:28 1279

原创 Qt 窗口部件详解(一) QButton

窗口部件本质上是继承自QWidget类或其派生类的对象。QWidget类处于 Qt GUI 类层次结构的核心位置,所有具体的窗口部件都直接或间接继承了它的特性。文本和图标文本:可通过setText(const QString &text)方法设置按钮上显示的文本,使用text() const方法获取当前显示的文本。图标:利用setIcon(const QIcon &icon)方法为按钮设置图标,使用icon() const方法获取当前的图标。按钮状态。

2025-05-11 08:58:39 1168

原创 Qt 信号与槽及元对象系统

qRegisterMetaType:将自定义类型注册到元对象系统中,让元对象系统能够识别该类型,这样在封装和提取事件参数时,才能知道参数的具体类型。Q_DECLARE_METATYPE:为自定义类型生成必要的元信息,这些元信息用于元对象系统在事件处理过程中进行类型检查、复制和转换等操作。在使用自定义类型时,需遵循特定的步骤。通常先使用Q_DECLARE_METATYPE进行编译时声明,使QVariant能够识别自定义类型;

2025-05-11 08:58:30 632

原创 Qt 坐标体系详解

x()、y()、topLeft()和bottomRight():返回的矩形位置信息使用的坐标系取决于QRect对象创建方式。QPainter ,默认 Viewport和Window坐标系重合,其原点 (0, 0) 处于绘制设备(像 QWidget、QPixmap 这类)的左上角位置,X 轴正方向朝右,Y 轴正方向朝下。以整个屏幕为参考,屏幕左上角是坐标原点 (0, 0) ,X 轴正方向向右,Y 轴正方向向下。以窗口自身为参考,窗口左上角为坐标原点 (0, 0),X 轴正方向向右,Y 轴正方向向下。

2025-05-11 08:58:19 425

原创 Qt 样式表:全面解析与应用指南

在 Qt 开发中,样式表(Style Sheets)是定义应用程序界面外观的关键工具。它采用文本格式的规则集合,借鉴了 CSS 语法,借助选择器、属性和值,能精准把控各类控件的外观表现,极大提升了界面设计的灵活性与美观性。

2025-05-11 08:58:08 1017

原创 qt 布局管理

布局管理器会根据子控件的sizeHint()(建议大小)和minimumSizeHint()(最小建议大小)来调整父窗口的大小。minimumSizeHint():同样是QWidget类的虚函数,返回的是控件能够正常显示所需的最小尺寸。sizeHint():是QWidget类的一个虚函数,返回的是控件的建议大小。这个大小是根据控件的内容、字体、图标等因素自动计算得出的,布局管理器通常会优先按照这个建议值来布置控件。当窗口大小改变时,布局管理器会自动调整其内部部件的位置和大小,以保持界面的整洁和一致性。

2025-05-11 08:57:46 514

原创 Qt 事件处理机制详解

在 Qt 中,事件是对程序运行时各类状况的抽象表示。

2025-05-11 08:57:12 756

原创 《STL源码剖析》笔记记录

STL源码剖析》笔记记录。

2025-03-02 15:54:28 481

原创 C++ 常见面试知识点

对于局部常量,存放在栈区;对于全局常量,编译期⼀般不分配内存,放在符号表中以提⾼访问效率;字⾯值常量,⽐如字符串,放在常量区。

2025-02-27 23:46:38 621

原创 QGraphicsView框架介绍

介绍QGraphicsView框架

2025-02-23 13:49:29 457

原创 Unix网络编程笔记(一、简介和TCP/IP)

MSL是任何IP数据报在因特网中可以存活的最大时间。A并不知道B是否接到自己的ACK,A是这么想的:1)如果B没有收到自己的ACK,会超时重传FiN那么A再次接到重传的FIN,会再次发送ACK2)如果B收到自己的ACK,也不会再发任何消息,包括ACK无论是1还是2,A都需要等待,要取这两种情况等待时间的最大值,以应对最坏的情况发生,这个最坏情况是:去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)。

2024-11-30 14:09:20 1089 1

原创 《c++并发编程实战》 笔记

这个新的可调用对象在调用时,会调用原始的可调用对象,并传递给它预先绑定的参数(如果有的话),以及调用新可调用对象时提供的任何额外参数。使用std::shared_future::wait,std::shared_future 与 std::future 类似,但主要区别在于 std::shared_future 可以被多个线程或对象共享,而 std::future 一旦被移动或拷贝后,原始对象将不再持有任何结果,变成空状态。std::call_once 是 C++11 引入的一个函数,它属于 头文件。

2024-08-18 12:44:19 1352

原创 调试技巧总结

3.观察问题的过程,找到足够细节做判断,而不是随意做猜测。4.细化问题范围(二分法、多分法)5.记录定位的步骤、顺序和结果。7.与他人讨论,获得新角度。容易排查过程中忘记、记错。学习目的:提高调试效率。1.了解工作原理/流程。8.闭环(解决问题)

2024-08-18 12:38:18 348

原创 Effective C++记录(精简版)

1、尽可能延后变量定义式的出现,尽可能在初始化的时候给初值实参,这样做可增加程序的清晰度并改善程序效率。1、绝对不要重新定义继承而来的non-virtual函数。会打破public继承时is a的关系。1、绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定(使用指针类型函数默认参数),而virtual函数——你唯一应该覆写的东西却是动态绑定。

2024-07-07 13:46:43 1006 1

原创 网络编程学习

什么是超文本?文本:在互联网早期的时候只是简单的字符文字,但现在已经可以扩展为图片、视频、压缩包等。超文本:超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。举例:HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,再经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。HTMLHTML 称为超文本标记语言,是一种标识性的语言。

2024-04-08 23:59:09 843

原创 常见加密和解密方法介绍。

介绍常见的加密和解密方法。常用的加密当时有三种分别是:对称加密:指数据加密和解密使用相同的密钥 数据的机密性: DES,AES非对称加密:也叫公钥加密,指数据加密和解密使用不同的密钥 密钥对儿 身份验证 DSA,RSA单向加密:指只能加密数据,而不能解密数据 数据的完整性 MD5,SHA系列算法。

2023-10-02 21:32:39 1440 1

原创 字符编码基本介绍

总结字符、字符集和字符编码的定义,了解编码如何乱码问题。

2023-09-10 15:19:59 448 1

原创 《QT 5.9 C++开发指南》学习笔记

问题:动态投射有啥用啊qvariant是什么类型,为什么可以支持其他类型。Qt并不是一个编程语言,它实质上是一个跨平台的C++开发类库,是用标准C++编写的类库,它为开发GUI应用程序和非GUI应用程序提供了各种类。Qt的元对象编辑器(Moc)是一个预处理器,在源程序被编译前先将这些Qt特性的程序转换为标准C++兼容的格式,然后再由C++编译器进行编译。所以要添加一个Q_OBJECT宏。

2023-04-16 12:32:09 1903

原创 C++ 变量内存分布

介绍变量在内存中的分布情况

2023-01-27 10:01:06 294

原创 C++ 三大特性:继承、封装和多态

C++ 三大特性:继承,封装和多态

2023-01-23 20:16:18 305

空空如也

空空如也

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

TA关注的人

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