C++
文章平均质量分 80
OpenC++
后之览者,亦将有感于斯文
展开
-
【C++】__declspec含义
`__declspec(dllexport)` 是 Microsoft Visual C++ 编译器提供的一个扩展,用于指示一个函数或变量在 DLL(动态链接库)中是**可导出的**。它告诉编译器将函数或变量放入 DLL 的导出表中,以便其他程序(包括其他编程语言和应用程序)可以使用它们。原创 2024-01-15 16:41:43 · 1336 阅读 · 1 评论 -
【C++】static_cast和dynamic_cast使用详解
`static_cast` 并不执行运行时类型检查。因此,如果你尝试执行一种不安全的转换,例如将基类指针转换为不相关的派生类指针,编译器可能不会发出警告或错误,但在运行时可能会导致未定义的行为。在这种情况下,你可能需要考虑使用 `dynamic_cast`,它执行运行时类型检查,但仅在涉及多态的情况下才适用。原创 2024-01-15 15:00:20 · 2280 阅读 · 1 评论 -
【C++】单一职责模式
在面向对象设计中,单一职责原则(Single Responsibility Principle,简称 SRP)是 SOLID 原则之一,提出了一个类应该只有一个修改的理念。具体来说,一个类应该只有一个引起它变化的原因,即一个类应该只有一个责任。如果一个类承担的责任过多,那么对这个类的修改就会影响到所有依赖它的地方。原创 2023-12-14 16:47:25 · 554 阅读 · 1 评论 -
【C++】策略模式
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,将每个算法封装到不同的类中,并且使它们可以相互替换。策略模式允许客户端代码选择算法的实现,而不是将算法的选择硬编码在客户端代码中。原创 2023-12-14 16:04:30 · 721 阅读 · 1 评论 -
【linux】tar:时间戳是未来的解决办法
使用tar解压文件时提示如下信息:tar :testFile:时间戳 2023-11-23 21:36:57 是未来的 24157.388023964 秒之后原创 2023-11-23 15:26:38 · 925 阅读 · 1 评论 -
【PB】protobuf安装使用详解
PB 是 Protocol Buffers 的简称。Protocol Buffers 是一种由 Google 开发的数据序列化格式,用于结构化数据的存储、交换和通信。它是一种轻量、高效、可扩展的数据交换格式。PB 通过使用预定义的消息类型和二进制编码来表示数据。你可以使用 Protocol Buffers 的定义语言(Protocol Buffers IDL)来定义数据结构和消息类型,然后使用相应的编译器将定义文件编译成特定编程语言的类或结构体,从而实现在不同编程语言中使用 Protocol Buffe原创 2023-10-24 10:55:45 · 930 阅读 · 0 评论 -
【C++】TCP通信服务端与客户端代码实现及详解
本文分享了TCP/IP的客户端及服务端的C++代码实现,并进行了详细的解析。其中服务端使用Winsock库实现了简单的TCP服务器,它监听指定端口并与客户端进行通信。代码仍然有改进的空间,例如可以处理更多的错误情况,添加更多的日志输出,以及更完善的输入验证等。原创 2023-10-19 13:41:43 · 7805 阅读 · 8 评论 -
【C++11/C++20】特性介绍
C++11 带来了许多强大的功能,提高了代码的可读性和性能,并使C++成为一个更现代化的编程语言。自那时以来,C++的标准还经历了多个版本的更新,每个版本都引入了新的特性和改进。C++20 极大地丰富了C++语言,提供了更多的现代化编程工具和性能优化,使得C++成为一个更加强大和灵活的编程语言。原创 2023-10-02 20:27:42 · 471 阅读 · 0 评论 -
【C++】单例模式
单例模式是常见的设计模式之一,本质是:只提供唯一的类的实例,其具有全局变量的特点,在任意位置都可以使用该类提供的接口访问到其唯一的实例对象。原创 2023-09-22 10:07:20 · 148 阅读 · 1 评论 -
【C++】读取txt文件并查询指定字段
按字符读取或按行读取txt文件,然后使用string::find()函数进行查找指定字段,若查到则返回0,未查到则返回-1。原创 2023-07-07 13:56:51 · 1968 阅读 · 3 评论 -
【C++】根据进程名获取进程ID
Windows下根据进程名称查找进程,若查到则返回PID,若未查到则返回-2;原创 2023-07-06 15:50:54 · 3039 阅读 · 2 评论 -
【C++】获取文件夹下所有文件名并重命名
1. `GetAllFileName()`获取指定路径下所有文件的名称 2. `ReplaceFileName()`根据指定字段的替换,重命名所有符合条件的文件名原创 2023-06-30 17:09:34 · 3277 阅读 · 1 评论 -
【LeetCode】算法:两数之和(twoSum)解法分析
题目 【两数之和】:给定一个整数数组`nums`和一个整数目标值`target`,请你在该数组中找出和为目标值`target`的那两个整数,并返回他们的下标。解法:使用哈希表来记录每个数字及其对应的下标。在遍历数组时,对于每个数字,计算出与目标值的差值,然后在哈希表中查找该差值是否已经存在。如果存在,说明找到了两个数的组合,将其下标存入结果数组。如果遍历结束后仍未找到满足条件的两个数,则返回一个空的结果数组。原创 2023-06-27 22:30:33 · 3194 阅读 · 6 评论 -
【C++】多线程(thread)使用详解
多线程(multithreading),是指在软件或者硬件上实现多个线程并发执行的技术。具有多核CPU的支持的计算机能够真正在同一时间执行多个程序片段,进而提升程序的处理性能。在一个程序中,这些独立运行的程序片段被称为“线程”(Thread),利用其编程的概念就叫作“多线程处理”。原创 2023-06-25 20:16:15 · 19010 阅读 · 3 评论 -
【C++STL】随机排序(random_shuffle)的使用
random_shuffle算法:洗牌,随机调整指定范围内元素的次序。对于`vector`(连续型可任意访问的容器)、`string`以及数组都可以使用`random_shuffle`算法。但对于`set`、`map`(自身具有排序功能)的容器或者非连续性容器则无法使用。原创 2023-06-20 17:05:05 · 1553 阅读 · 1 评论 -
【C++】链表(list)的使用以及与vector的区别
在 C++ 中,`std::list` 是标准库提供的一个容器类,用于将数据进行链式存储。**链表**(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。原创 2023-06-14 20:02:50 · 3762 阅读 · 0 评论 -
【C++】指针常量与常量指针的含义与区别
分别介绍C++中指针常量与常量指针的含义以及两者的区别,分享了一种简单快速的区分方法,避免大家混淆两者概念。原创 2023-06-10 14:00:50 · 161 阅读 · 0 评论 -
【C++11】基于范围的for循环使用说明
C++11 引入了基于范围的 `for` 循环(Range-based for loop),它是一种方便遍历容器或其他可迭代对象的**语法糖**。原创 2023-06-07 10:30:39 · 611 阅读 · 0 评论 -
【C++】语法糖(Syntactic Sugar)的概念与常见应用
语法糖(Syntactic Sugar),也译为糖衣语法,是一种编程语言的设计概念,指的是一种语法结构或编码风格,它在语法上提供了更简洁、更易读的方式来表达某个特定的操作或概念,但在底层实现上仍使用了相对复杂的语法规则或操作。原创 2023-06-05 21:19:01 · 1276 阅读 · 0 评论 -
【C++】关联式容器(map与multimap)的使用
C++ 中,`std::map`和`multimap`都属于**关联式容器**,且都包含在头文件`#include `中,其底层结构都是用**二叉树**实现的。- `map`中所有元素都是`pair`,`pair`中第一个元素为**键值**(`key`),起索引的作用;第二个元素为**实值**(`value`),即映射值- 该类容器中元素在插入时都会根据元素的**键值**(`key`)自动排序原创 2023-06-04 12:08:32 · 652 阅读 · 1 评论 -
【C++STL】快速排序算法(sort)的原理与使用
`std::sort` 是 C++ 标准库中提供的排序算法,它使用的是一种经典的排序算法——**快速排序**(Quicksort)或者是其变种。快速排序是一种基于比较的排序算法,通过不断地选择一个基准值(pivot),将待排序序列分割为两个子序列,其中一个子序列的所有元素小于等于基准值,另一个子序列的所有元素大于基准值。然后递归地对两个子序列进行排序,最终得到有序序列。原创 2023-06-02 17:59:26 · 13817 阅读 · 1 评论 -
【C++STL】遍历算法(for_each)的原理与使用
`for_each()`遍历算法非常灵活,允许以不同的方式访问、处理、修改每一个元素。因此,`for_each()`既属于质变算法,也属于非质变算法。原创 2023-06-01 17:13:05 · 4349 阅读 · 0 评论 -
【C++】集合(set与multiset)的使用及set自定义类型排序
C++ 中,`std::set`和`multiset`都属于关联式容器,且都包含在头文件`#include `中,其底层结构都是用二叉树实现的,该类容器中元素在插入时都会被自动排序。原创 2023-05-31 16:35:53 · 2440 阅读 · 0 评论 -
【C++】队列(queue)的使用
`std::queue` 是一个简单、高效的队列容器,适用于需要按照先进先出顺序处理元素的场景。它在插入和删除操作上具有良好的性能,且无需手动管理内存。然而,由于功能受限,如果需要在任意位置插入或删除元素,或需要遍历队列中的元素,就需要选择其他更适合的容器。原创 2023-05-27 18:09:35 · 12805 阅读 · 1 评论 -
【C++】动态数组(vector)的使用
在 C++ 中,`std::vector` 是标准库提供的一个容器类,用于存储动态大小的元素序列(即"动态数组")。它提供了一系列成员函数和操作符,使得元素的访问、插入、删除等操作变得方便和高效。原创 2023-05-19 14:58:36 · 8250 阅读 · 1 评论 -
【C++】字符串(string)的使用
C++ 中,`std::string` 是用于处理字符串的标准库类。它提供了一系列成员函数和操作符,使得字符串的操作更加方便和灵活。原创 2023-05-18 21:30:16 · 3193 阅读 · 2 评论 -
【C++】栈(stack)的使用及push与emplace异同点
C++ 中,`std::stack` 容器是一种*先进后出*(First In Last Out, FILO)的数据结构,且只有一个出口。详细介绍了C++中stack的使用方法,并分析了push与emplace的异同点。原创 2023-05-24 16:44:53 · 3153 阅读 · 1 评论 -
【C++】#ifndef #endif含义与使用说明
`#ifndef` 和 `#endif` 是 C++ 预处理器指令,通常用来避免头文件的重复包含。原创 2023-05-05 15:28:17 · 2648 阅读 · 3 评论 -
【C++】内联函数(inline)与宏定义(#define)使用说明及区别
详细分析C++中内联函数(inline)与宏定义(#define)使用方法和注意事项以及两者的异同点。原创 2023-05-05 13:10:51 · 7514 阅读 · 5 评论