
C++知识
文章平均质量分 71
c++知识
A小庞
一个正在编程世界里摸爬滚打的小白
哪里不懂,就啃哪里
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一文搞清楚C++公有继承、私有继承、保护继承。
C++继承方式的区别与选择 C++提供三种继承方式:公有继承(public)、私有继承(private)和保护继承(protected),核心区别在于基类成员在派生类中的访问权限: 公有继承:保留基类接口,基类public成员在派生类仍为public,protected仍为protected,实现"is-a"关系。 私有继承:基类public和protected成员在派生类变为private,隐藏基类接口,终止继承链,实现"has-a"关系。 保护继承:基类publi原创 2025-07-22 14:17:50 · 789 阅读 · 0 评论 -
C++字符串详解:原理、操作及力扣算法实战
摘要:本文系统介绍了C++字符串处理的两种方式:字符数组和std::string类,重点分析了std::string的动态内存管理原理和常用操作(赋值、拼接、查找等)。通过力扣算法题(回文串、最长公共前缀等)展示了字符串处理的实际应用。文章对比了两种方式的特性,建议现代C++开发优先使用std::string,并强调边界检查和安全操作的重要性,为C++字符串处理提供了全面的技术指导。(150字)原创 2025-07-11 16:01:31 · 1093 阅读 · 0 评论 -
C++哈希表:从零到精通,掌握高效数据存储与检索的利器
本文全面介绍了C++中的哈希表核心知识,重点分析了unordered_map和unordered_set的实现原理与使用方法。内容涵盖哈希函数设计、冲突解决策略(链地址法、开放寻址法)、性能优化技巧(负载因子调整、扩容机制)等关键技术点,并针对算法面试常见问题(如两数之和、LRU缓存)提供代码示例。文章还总结了哈希表在实际应用中的多种场景(数据库索引、缓存系统等),最后给出了循序渐进的学习路线和常见误区避坑指南,帮助读者从理论到实践全面掌握哈希表这一重要数据结构。原创 2025-06-26 17:35:50 · 720 阅读 · 0 评论 -
C++链表详解:从零开始掌握链表结构,轻松应对算法面试
本文系统介绍了链表这一基础数据结构,重点分析了C++中链表的实现与应用。内容涵盖:1)链表与数组的核心对比;2)单向、双向和循环链表的实现方式;3)链表的基本操作(插入、删除、反转等)及时间复杂度分析;4)常见错误与优化技巧;5)面试高频考点和实际应用场景(如LRU缓存)。文章强调指针操作顺序、内存管理和边界条件等关键点,并提供了学习路线和推荐资源。链表作为算法面试的核心考点,需要结合实践才能真正掌握。原创 2025-06-26 17:21:41 · 2481 阅读 · 0 评论 -
用 Boost 库解析 .ini 和 .json 文件时的“坑”:注释导致的解析错误与解决方案
摘要:使用Boost库解析配置文件时需注意其严格的注释处理规则。对于.ini文件,Boost要求注释必须独占一行,key值后的行内注释会导致解析失败;对于.json文件,Boost完全遵循JSON标准不支持任何注释。这与许多其他解析库的宽松处理形成差异。建议解决方案包括:1)解析前预处理去除注释;2)改用支持注释的替代库(libini/nlohmann/json);3)严格规范配置文件格式。Boost的严格性体现了对标准的尊重,开发者需根据项目需求选择合适方案。原创 2025-06-25 14:24:06 · 655 阅读 · 0 评论 -
从零到一:C语言基础入门学习路线与核心知识点全解析
学习C语言是一场从底层逻辑到高级抽象的探索之旅。通过系统化的学习路线和持续的实践,你不仅能掌握一门编程语言,还能建立起对计算机科学的深刻理解。记住,编程的核心是解决问题,而C语言为你打开了一扇通向底层世界的大门。现在,拿起键盘,开始你的编程冒险吧!原创 2025-06-17 20:28:05 · 902 阅读 · 1 评论 -
一文搞懂 C++ 中 std::set、std::unordered_set、std::map 和 std::unordered_map 的用法与选择策略
在C++编程中,std::set、std::unordered_set、std::map和std::unordered_map是常用的关联容器,用于存储唯一键值。std::set和std::map基于红黑树实现,元素自动排序,适合需要有序存储和范围查询的场景,时间复杂度为O(log n)。std::unordered_set和std::unordered_map基于哈希表实现,元素无序存储,适合需要快速查找、插入和删除的场景,平均时间复杂度为O(1),最坏情况下为O(n)。选择容器时需考虑是否需要排序、范围原创 2025-05-20 15:44:35 · 1019 阅读 · 0 评论 -
Visual Studio 编译错误 LNK2038:MTD 和 MDD 的区别及解决方法
LNK2038错误通常是由于运行时库配置不匹配引起的。通过检查项目设置,统一运行时库配置,修改第三方库的配置,使用预处理器指令等方法,可以有效解决这个问题。希望本文能够帮助你更好地理解和解决LNK2038错误,提高项目的编译和运行效率。原创 2025-03-04 14:48:22 · 1175 阅读 · 0 评论 -
手把手教程:在 VS2017 32位 Windows 环境下编译 OR-Tools 9.6 并集成到 C++ 项目
通过本文的两种方法,你可以根据需求选择快速集成或深度定制 OR-Tools。原创 2025-02-27 14:43:10 · 1289 阅读 · 0 评论 -
服务器缓存区的过期删除策略:原理与实现
缓存区是服务器架构中不可或缺的一部分,但管理不当可能会导致性能问题。通过设置合理的过期删除规则,可以确保缓存区中的数据始终是最新的,同时避免内存占用过多。本文介绍了几种常见的缓存过期删除策略(TTL、LRU、LFU),并提供了相应的实现方法和示例代码。希望读者能够通过本文掌握缓存区管理的关键思路,并在实际应用中加以运用。原创 2025-02-25 11:28:15 · 1107 阅读 · 0 评论 -
轻松上手 C++ 的 RapidJSON 解析库:从零开始的教程
RapidJSON 是一个高性能、轻量级的 JSON 解析库,专为 C++ 设计。高性能:RapidJSON 的解析速度非常快,几乎可以与strlen()函数的速度相媲美。易用性:RapidJSON 提供了简洁的 API,使得解析和生成 JSON 数据变得非常简单。灵活性:支持多种数据类型,包括对象、数组、字符串、数字、布尔值和 NULL。跨平台:支持 Windows、Linux、macOS 等多种操作系统。在访问 JSON 数据之前,最好先检查成员是否存在,以避免程序崩溃。可以使用HasMember。原创 2025-02-08 17:58:10 · 1665 阅读 · 0 评论 -
C++ 中的 cJSON 解析库:用法、实现及递归解析算法与内存高效管理
cJSON 是一个轻量级的 JSON 解析库,支持 C 和 C++ 语言。它提供了简单易用的 API,可以方便地解析 JSON 数据和生成 JSON 字符串。轻量级:cJSON 的代码量较小,适合嵌入式系统和资源受限的环境。高性能:cJSON 使用高效的解析算法,能够快速解析和生成 JSON 数据。易用性:cJSON 提供了简洁的 API,开发者可以轻松上手。灵活性:cJSON 支持多种数据类型,包括对象、数组、字符串、数字、布尔值和 NULL。原创 2025-02-08 17:50:19 · 943 阅读 · 0 评论 -
【C++开源库】tinyxml2解析库使用介绍
TinyXML-2是一个功能强大且易于使用的XML解析库,它为C++开发者提供了快速解析和生成XML数据的能力。通过简单的API和跨平台的支持,TinyXML-2成为了处理XML数据的理想选择。无论是在大型企业应用还是在资源受限的嵌入式系统中,TinyXML-2都能发挥其优势。原创 2025-01-11 17:19:43 · 869 阅读 · 0 评论 -
【C++开源库】Boost.Asio网络库使用介绍
Boost.Asio是一个功能全面的库,它提供了异步编程模型、跨平台兼容性、高性能和灵活性等特性。它被广泛应用于构建各种类型的网络应用程序,包括Web服务器、游戏服务器、实时通信系统等。通过简单的配置和代码,你可以轻松实现高效的网络通信功能,提升项目的可维护性和调试效率。原创 2025-01-11 17:12:37 · 817 阅读 · 0 评论 -
C++高性能日志库spdlog实战
spdlog是一个由Gabriel Melman开发的高速、轻量级的C++日志库,旨在提供简单易用的日志记录功能,同时保持高性能。它支持多种日志目标,包括控制台、文件、轮转文件等,允许自定义日志过滤和动态改变日志级别。该库的设计使其在多线程环境中也能安全使用,适合高负载的日志记录场景。spdlog是一个功能强大且易于使用的C++日志库,适合各种项目开发需求。通过简单的配置和代码,你可以轻松实现高效的日志记录功能,提升项目的可维护性和调试效率。t=O83A。原创 2025-01-10 15:12:10 · 1174 阅读 · 0 评论 -
探索 C++ 中的 Any 类:灵活处理任意类型数据
在 C++ 编程中,我们经常需要处理各种不同类型的数据。标准库提供了std::any类来存储任何类型的值,但了解其底层实现可以帮助我们更好地掌握 C++ 的特性。本文将介绍一个自定义的Any类,它模仿std::any的功能,允许存储和操作任意类型的数据。原创 2024-12-21 14:30:06 · 384 阅读 · 0 评论 -
一文搞懂C++工厂模式设计模式
工厂模式是软件设计模式中的一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,创建对象的任务被委托给专门的工厂类,而不是在客户端代码中直接通过new操作符创建。这样,客户端代码就可以从具体的产品类中解耦,提高代码的灵活性和可维护性。原创 2024-12-10 15:38:43 · 343 阅读 · 0 评论 -
Boost库介绍
Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库由Boost社区组织开发、维护。其目的是为C++程序员提供免费、同行审查的、可移植的程序库。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。Boost库使用Boost License来授权使用,根据该协议,商业的非商业的使用都是允许并鼓励的。Boost社区建立的初衷之一就是为C++的标准化工作提供可供参考的实现,Boost社区的发起人Dawes本人就是C++标准委员会的成员之一。原创 2024-11-20 10:19:38 · 753 阅读 · 0 评论 -
Linux下sleep函数报错及解决
可能是我的项目中有命名空间冲突,加上之后项目能正常运行。我这个问题可能只针对一些项目中命名空间冲突引起的问题,希望能帮助到您!请确保头文件的包含window下的头文件为#include Linux下的头文件为#include 。我的源代码,TimeUtils类为工具类,工具类:本身不会被实例化,它的所有功能都是通过静态成员(静态方法和静态变量)提供的。请看下面的解决办法】原因:这样子编写会报错,因为我做的项目是库,库里面很多自定义的命名空间。原创 2024-07-13 15:49:54 · 463 阅读 · 0 评论 -
【日志管理宏】C++实现,快速定位问题。
因此,一个健全的日志管理机制是软件开发项目中不可或缺的一部分。日志管理在软件开发项目中扮演着至关重要的角色。【日志管理宏】C++实现,快速定位问题。日志管理在软件开发项目中扮演着至关重要的角色。原创 2024-07-16 20:13:39 · 479 阅读 · 0 评论 -
[C++部分用法总结] std::future,std::function,std::packaged_task,std::forward
std::function是一个通用、多态的函数封装器。它可以存储、调用或复制任何可以调用的目标,包括普通函数、Lambda表达式、函数对象以及成员函数指针。std::packaged_task封装了一个可调用对象,并允许异步地获取其结果。它通常与std::thread和std::future一起使用。std::forward用于完美转发参数。这对于编写泛型代码和保持移动语义非常重要。std::future用于从异步操作中获取结果。它通常与std::promise或std::async一起使用。原创 2024-10-11 17:18:51 · 386 阅读 · 0 评论 -
C++成员函数模板的定义和使用。
成员函数模板的定义通常应该放在头文件中,以确保模板定义在编译时对所以可能的模板类型都是可见的如果将模板定义在.cpp文件中,可能会导致链接器错误,因为在编译使用模板源文件时可能找不到模板的定义因为它们位于同一个编译单元中,编译器在编译该单元时能够同时看到两者的定义。然而,为了在其他编译单元中使用模板,必须确保模板的定义在编译时是可见的。这通常通过将模板定义放在头文件中,或者使用包含机制来实现。原创 2024-09-07 16:06:58 · 349 阅读 · 0 评论 -
[C++细节]:析构函数弄成纯虚,避免创建实例
在多态场景中,如果通过基类指针删除派生类对象,而基类析构函数不是虚函数(或不是纯虚函数但没有在派生类中重写),那么只会调用基类的析构函数,而不会调用派生类的析构函数。是的,在C++中,将析构函数声明为纯虚(pure virtual)函数的主要目的确实是为了避免创建该类的实例。纯虚函数是一种特殊的虚函数,它在基类中声明但没有定义,要求派生类必须提供具体的实现。如果基类析构函数是纯虚的,那么通过基类指针删除派生类对象时,将确保调用正确的析构函数链。:抽象类通常用作派生类的基类,为派生类提供接口或共同行为。原创 2024-10-10 16:42:26 · 218 阅读 · 0 评论 -
expected class-name before ‘{‘ token错误及解决
1.前置声明:在使用到类的定义前面 声明一下。4.类中定义了对象的可以改为引用或者指针。2.重构代码,以避免循环依赖问题。仅供参考,具体情况还得具体分析。3.更改头文件包含顺序。原创 2024-09-20 15:41:14 · 535 阅读 · 0 评论