C++
文章平均质量分 83
OpenC++
后之览者,亦将有感于斯文
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++】虚函数表与虚指针详解
在 C++ 中,**虚表**(Virtual Table,简称 vtable)和**虚指针**(Virtual Pointer,简称 vptr)是实现多态(Polymorphism)的核心机制,主要用于处理基类指针或引用调用派生类成员函数的场景。如果一个类包含 **虚函数(virtual function)**,编译器需要在运行时支持 **动态绑定(dynamic dispatch)**,即:**编译期无法确定调用哪个函数**,要等到运行时根据对象的实际类型来决定。原创 2025-09-18 17:00:20 · 1050 阅读 · 0 评论 -
【C++】动态库和静态库详细说明
本文梳理了 **静态库、动态库、链接、运行时依赖** 的关系,并结合 Windows/C++/CMake 场景说明。原创 2025-08-27 15:12:14 · 915 阅读 · 0 评论 -
【C++】#define 宏定义使用说明
宏定义是 C++ 中强大的工具,适合用于定义常量、简化重复代码或实现简单逻辑。但由于其缺乏类型检查和可能带来的副作用,在使用时需谨慎,复杂逻辑建议优先使用函数或模板。合理使用宏可以提高代码效率和可维护性,但过度依赖会导致代码难以调试和理解。原创 2025-08-11 08:43:54 · 1293 阅读 · 0 评论 -
【C++QT】Buttons 按钮控件详解
在 Qt 的 `QtWidgets` 模块中,**Buttons 组控件**是用户交互的核心组件,涵盖触发操作、状态选择、对话框按钮布局等功能。本文包含 **QPushButton、QToolButton、QCheckBox、QRadioButton、QCommandLinkButton、QDialogButtonBox** 的详细用法、技巧及实战示例。原创 2025-04-24 17:12:27 · 1802 阅读 · 0 评论 -
【C++QT】Item Views 项目视图控件详解
在 Qt 中,`Item Views`组控件提供了强大且灵活的方式来展示和管理数据。这些控件基于模型 - 视图(Model - View)架构,将数据的存储和呈现进行分离,使得代码具有更好的可维护性和可扩展性。本文详细介绍了`List View`、`Tree View`、`Table View`和`Column View` 控件的使用方法和信号与槽示例。原创 2025-04-28 14:40:30 · 1092 阅读 · 0 评论 -
【C++QT】Layout 布局管理控件详解
在 C++ Qt 中,布局管理器(Layout)是用于自动管理窗口中控件的大小和位置的重要工具。`Layout` 组中常见的布局类型有 `QVBoxLayout`(垂直布局)、`QHBoxLayout`(水平布局)、`QGridLayout`(网格布局)和 `QFormLayout`(表单布局)。本文将详细解析这些布局管理器的使用方法和应用场景。原创 2025-04-27 17:24:22 · 1365 阅读 · 0 评论 -
【C++】简单工厂模式
简单工厂模式是一种实例化对象的方式,其专门定义一个类用于创建其他的类,被创建的实例具有同一个基类,使用时只需要输入相应枚举即可创建所需的对象。在程序中,若需要创建的对象较多,导致new对象时复杂混乱,此时使用简单工厂模式,可以将对象的创建与操作分为两部分,方便后期的维护与管理。原创 2023-09-05 15:34:57 · 296 阅读 · 1 评论 -
【C++】Lambda表达式
Lambda表达式是C++11引入的匿名函数对象,具有以下特点:· 就地定义,无需单独命名· 可捕获上下文变量· 自动推导返回类型(多数情况)· 可作为函数参数传递原创 2025-02-04 12:05:22 · 9668 阅读 · 0 评论 -
【C++】线程池实现
线程池是一种并发编程技术,通过预先创建一组线程并复用它们来执行多个任务,避免了频繁创建和销毁线程的开销。它特别适合处理大量短生命周期任务的场景(如服务器请求、并行计算)。线程池的核心组件1. 任务队列(Task Queue)存储待执行的任务(通常是函数对象或可调用对象)。2. 工作线程(Worker Threads)一组预先创建的线程,不断从队列中取出任务并执行。3. 同步机制互斥锁(Mutex):保护任务队列的线程安全访问。条件变量(Condition Variable):通知线程任原创 2025-02-03 20:06:36 · 2326 阅读 · 0 评论 -
【C++】__declspec含义
`__declspec(dllexport)` 是 Microsoft Visual C++ 编译器提供的一个扩展,用于指示一个函数或变量在 DLL(动态链接库)中是**可导出的**。它告诉编译器将函数或变量放入 DLL 的导出表中,以便其他程序(包括其他编程语言和应用程序)可以使用它们。原创 2024-01-15 16:41:43 · 1922 阅读 · 1 评论 -
【C++】static_cast和dynamic_cast使用详解
`static_cast` 并不执行运行时类型检查。因此,如果你尝试执行一种不安全的转换,例如将基类指针转换为不相关的派生类指针,编译器可能不会发出警告或错误,但在运行时可能会导致未定义的行为。在这种情况下,你可能需要考虑使用 `dynamic_cast`,它执行运行时类型检查,但仅在涉及多态的情况下才适用。原创 2024-01-15 15:00:20 · 4162 阅读 · 1 评论 -
【C++】单一职责原则
单一职责原则(Single Responsibility Principle,简称 SRP)是 SOLID 原则之一,提出了一个类应该只有一个修改的理念。具体来说,一个类应该只有一个引起它变化的原因,即一个类应该只有一个责任。如果一个类承担的责任过多,那么对这个类的修改就会影响到所有依赖它的地方。原创 2023-12-14 16:47:25 · 1680 阅读 · 1 评论 -
【C++】策略模式
策略模式(Strategy Pattern)是一种【行为型】设计模式,它定义了一系列算法,将每个算法封装到不同的类中,并且使它们可以相互替换。策略模式允许客户端代码选择算法的实现,而不是将算法的选择硬编码在客户端代码中。原创 2023-12-14 16:04:30 · 1697 阅读 · 1 评论 -
【C++】TCP通信服务端与客户端代码实现及详解
本文分享了TCP/IP的客户端及服务端的C++代码实现,并进行了详细的解析。其中服务端使用Winsock库实现了简单的TCP服务器,它监听指定端口并与客户端进行通信。代码仍然有改进的空间,例如可以处理更多的错误情况,添加更多的日志输出,以及更完善的输入验证等。原创 2023-10-19 13:41:43 · 9306 阅读 · 8 评论 -
【C++11/C++20】特性介绍
C++11 带来了许多强大的功能,提高了代码的可读性和性能,并使C++成为一个更现代化的编程语言。自那时以来,C++的标准还经历了多个版本的更新,每个版本都引入了新的特性和改进。C++20 极大地丰富了C++语言,提供了更多的现代化编程工具和性能优化,使得C++成为一个更加强大和灵活的编程语言。原创 2023-10-02 20:27:42 · 685 阅读 · 0 评论 -
【C++】单例模式
单例模式(Singleton Pattern) 是一种常见的【创建型】设计模式,本质是:只提供唯一的类的实例,其具有全局变量的特点,在任意位置都可以使用该类提供的接口访问到其唯一的实例对象。原创 2023-09-22 10:07:20 · 295 阅读 · 1 评论 -
【C++】读取txt文件并查询指定字段
按字符读取或按行读取txt文件,然后使用string::find()函数进行查找指定字段,若查到则返回0,未查到则返回-1。原创 2023-07-07 13:56:51 · 2541 阅读 · 3 评论 -
【C++】根据进程名获取进程ID
Windows下根据进程名称查找进程,若查到则返回PID,若未查到则返回-2;原创 2023-07-06 15:50:54 · 3902 阅读 · 2 评论 -
【C++】获取文件夹下所有文件名并重命名
1. `GetAllFileName()`获取指定路径下所有文件的名称 2. `ReplaceFileName()`根据指定字段的替换,重命名所有符合条件的文件名原创 2023-06-30 17:09:34 · 4022 阅读 · 1 评论 -
【LeetCode】算法:两数之和(twoSum)解法分析
题目 【两数之和】:给定一个整数数组`nums`和一个整数目标值`target`,请你在该数组中找出和为目标值`target`的那两个整数,并返回他们的下标。解法:使用哈希表来记录每个数字及其对应的下标。在遍历数组时,对于每个数字,计算出与目标值的差值,然后在哈希表中查找该差值是否已经存在。如果存在,说明找到了两个数的组合,将其下标存入结果数组。如果遍历结束后仍未找到满足条件的两个数,则返回一个空的结果数组。原创 2023-06-27 22:30:33 · 4701 阅读 · 6 评论 -
【C++】多线程(thread)使用详解
多线程(multithreading),是指在软件或者硬件上实现多个线程并发执行的技术。具有多核CPU的支持的计算机能够真正在同一时间执行多个程序片段,进而提升程序的处理性能。在一个程序中,这些独立运行的程序片段被称为“线程”(Thread),利用其编程的概念就叫作“多线程处理”。原创 2023-06-25 20:16:15 · 26575 阅读 · 8 评论 -
【C++STL】随机排序(random_shuffle)的使用
random_shuffle算法:洗牌,随机调整指定范围内元素的次序。对于`vector`(连续型可任意访问的容器)、`string`以及数组都可以使用`random_shuffle`算法。但对于`set`、`map`(自身具有排序功能)的容器或者非连续性容器则无法使用。原创 2023-06-20 17:05:05 · 2224 阅读 · 1 评论 -
【C++】链表(list)的使用以及与vector的区别
在 C++ 中,`std::list` 是标准库提供的一个容器类,用于将数据进行链式存储。**链表**(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。原创 2023-06-14 20:02:50 · 4178 阅读 · 0 评论 -
【C++】指针常量与常量指针的含义与区别
分别介绍C++中指针常量与常量指针的含义以及两者的区别,分享了一种简单快速的区分方法,避免大家混淆两者概念。原创 2023-06-10 14:00:50 · 287 阅读 · 0 评论 -
【C++11】基于范围的for循环使用说明
C++11 引入了基于范围的 `for` 循环(Range-based for loop),它是一种方便遍历容器或其他可迭代对象的**语法糖**。原创 2023-06-07 10:30:39 · 969 阅读 · 0 评论 -
【C++】语法糖(Syntactic Sugar)的概念与常见应用
语法糖(Syntactic Sugar),也译为糖衣语法,是一种编程语言的设计概念,指的是一种语法结构或编码风格,它在语法上提供了更简洁、更易读的方式来表达某个特定的操作或概念,但在底层实现上仍使用了相对复杂的语法规则或操作。原创 2023-06-05 21:19:01 · 1835 阅读 · 0 评论 -
【C++】关联式容器(map与multimap)的使用
C++ 中,`std::map`和`multimap`都属于**关联式容器**,且都包含在头文件`#include `中,其底层结构都是用**二叉树**实现的。- `map`中所有元素都是`pair`,`pair`中第一个元素为**键值**(`key`),起索引的作用;第二个元素为**实值**(`value`),即映射值- 该类容器中元素在插入时都会根据元素的**键值**(`key`)自动排序原创 2023-06-04 12:08:32 · 818 阅读 · 1 评论 -
【C++STL】快速排序算法(sort)的原理与使用
`std::sort` 是 C++ 标准库中提供的排序算法,它使用的是一种经典的排序算法——**快速排序**(Quicksort)或者是其变种。快速排序是一种基于比较的排序算法,通过不断地选择一个基准值(pivot),将待排序序列分割为两个子序列,其中一个子序列的所有元素小于等于基准值,另一个子序列的所有元素大于基准值。然后递归地对两个子序列进行排序,最终得到有序序列。原创 2023-06-02 17:59:26 · 16177 阅读 · 1 评论 -
【C++STL】遍历算法(for_each)的原理与使用
`for_each()`遍历算法非常灵活,允许以不同的方式访问、处理、修改每一个元素。因此,`for_each()`既属于质变算法,也属于非质变算法。原创 2023-06-01 17:13:05 · 5399 阅读 · 0 评论 -
【C++】集合(set与multiset)的使用
C++ 中,`std::set`和`multiset`都属于关联式容器,且都包含在头文件`#include `中,其底层结构都是用二叉树实现的,该类容器中元素在插入时都会被自动排序。原创 2023-05-31 16:35:53 · 3244 阅读 · 0 评论 -
【C++】队列(queue)的使用
`std::queue` 是一个简单、高效的队列容器,适用于需要按照先进先出顺序处理元素的场景。它在插入和删除操作上具有良好的性能,且无需手动管理内存。然而,由于功能受限,如果需要在任意位置插入或删除元素,或需要遍历队列中的元素,就需要选择其他更适合的容器。原创 2023-05-27 18:09:35 · 18143 阅读 · 1 评论 -
【C++】动态数组(vector)的使用
在 C++ 中,`std::vector` 是标准库提供的一个容器类,用于存储动态大小的元素序列(即"动态数组")。它提供了一系列成员函数和操作符,使得元素的访问、插入、删除等操作变得方便和高效。原创 2023-05-19 14:58:36 · 12570 阅读 · 8 评论 -
【C++】字符串(string)的使用
C++ 中,`std::string` 是用于处理字符串的标准库类。它提供了一系列成员函数和操作符,使得字符串的操作更加方便和灵活。原创 2023-05-18 21:30:16 · 3413 阅读 · 2 评论 -
【C++】栈(stack)的使用
C++ 中,`std::stack` 容器是一种*先进后出*(First In Last Out, FILO)的数据结构,且只有一个出口。详细介绍了C++中stack的使用方法,并分析了push与emplace的异同点。原创 2023-05-24 16:44:53 · 4312 阅读 · 1 评论 -
【C++】#ifndef #endif含义与使用说明
`#ifndef` 和 `#endif` 是 C++ 预处理器指令,通常用来避免头文件的重复包含。原创 2023-05-05 15:28:17 · 2953 阅读 · 3 评论 -
【C++】内联函数(inline)与宏定义(#define)使用说明及区别
详细分析C++中内联函数(inline)与宏定义(#define)使用方法和注意事项以及两者的异同点。原创 2023-05-05 13:10:51 · 10215 阅读 · 5 评论
分享