
C/C++技术干货
文章平均质量分 94
关于C和C++编程的宝贵知识和实用技巧。深入探讨C和C++编程语言的各个方面,包括语法、数据结构、算法、性能优化、内存管理、多线程编程等等。通过清晰的解释、实用的示例和深入的讨论,帮助更好地理解和应用C/C++编程技术。《C/C++技术干货》专栏将不定时更新,分享最新、最实用的C/C++技术知识。
Lion 莱恩呀
专注于后端全栈开发技术研究与分享。覆盖领域包括但不限于:C/C++底层原理与实践、Linux系统编程与运维、数据库(SQL/NoSQL)设计与优化、分布式系统架构与实现、主流中间件应用与源码、云原生(容器、K8s等)技术栈。致力于分享实战经验、系统设计思路与前沿技术洞察。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
预处理指令 #embed 来了!C++23 如何实现文件嵌入?
embed预处理指令作为 C++23 标准中引入的一项重要特性,为 C++ 开发者带来了一种全新的、便捷的嵌入文件内容的方式。#embed将配置文件嵌入到程序中,简化配置读取流程。嵌入静态查找表、数据数组等,提高数据访问效率。将固件代码片段嵌入到嵌入式系统中。嵌入 Shader 代码,方便图形渲染。#embed指令不仅是 C++23 标准的一个重要补充,也代表了 C++ 语言在资源管理方面的新方向。它的出现不仅简化了开发流程,也提高了代码的质量和性能。原创 2025-07-27 09:00:00 · 1026 阅读 · 0 评论 -
还在用迭代器?C++20 Ranges 了解一下
本文将深入探讨 Ranges 的概念和使用方法,并展示它如何解决传统迭代器带来的问题。原创 2025-07-18 09:00:00 · 716 阅读 · 0 评论 -
C++怎么学?零基础到大神,一份完整学习路线图助你搞定!
提供一条清晰、系统且实践导向的C++学习路径。从基础语法、面向对象、泛型编程、异常处理,逐步深入STL、智能指针、并发编程等现代C++高级特性。无论是新手还是希望提升,通过系统学习与项目实践,助您将理论知识转化为实际解决问题的能力。原创 2025-07-14 09:00:00 · 748 阅读 · 2 评论 -
C++ 数据结构选择:向量映射还是多重映射?实战案例解析
本文对比了 C++ 中向量映射和多重映射在事件系统中的应用。通过案例分析,揭示了多重映射在简化代码和提高效率方面的优势,为读者提供数据结构选型的参考。原创 2025-07-11 09:00:00 · 793 阅读 · 0 评论 -
【056】C++ STL 算法:掌握这些,你的代码效率提升 10 倍!
本文介绍了C++ STL算法的核心优势和使用方法,STL算法具有简单、高效、通用的特点,能替代传统循环完成数据处理、排序、查找等操作。通过STL算法可以写出更简洁、高效且易于维护的C++代码。原创 2025-07-04 09:00:00 · 877 阅读 · 0 评论 -
突破 STL 的多态壁垒:将多态函数对象传递给算法
本文探讨了C++中将多态函数对象传递给STL算法的解决方案。作者指出,由于STL算法按值传递参数的特性,直接传递多态对象会导致对象切割和多态行为丢失。提出了两种解决方案:一是使用lambda表达式通过引用捕获对象;二是更优雅地使用std::ref创建引用包装器。实验证明std::ref方案更简洁高效,既能保持多态特性,又避免了代码冗余。文章揭示了C++多态编程与STL结合时的特殊问题及其解决技巧。原创 2025-06-18 09:00:00 · 952 阅读 · 0 评论 -
【055】C++ STL 集合算法:卷起来!用这些算法让你的代码更高级
C++ STL集合算法提供了高效的已排序区间操作,包括包含判断、集合并集等。这些算法位于<algorithm>头文件中,要求输入区间必须已排序。原创 2025-06-16 09:00:00 · 1583 阅读 · 0 评论 -
【054】5 个 C++ STL 算术生成算法:原来数值计算可以这么简单!
C++ STL 算术生成算法精要 摘要:本文介绍了C++ STL中5个核心算术生成算法的使用场景和实现方法。accumulate算法提供灵活的累积计算能力,支持求和、求积、字符串连接等操作;fill算法用于快速填充容器数据;iota生成递增序列;generate支持自定义数据生成逻辑;partial_sum计算部分和分析数据趋势。原创 2025-06-11 09:00:00 · 1051 阅读 · 0 评论 -
【053】C++ STL 算法精讲:copy、replace、swap 用好了能省一半代码!
本文介绍 C++ STL 中的 `copy`、`replace` 和 `swap` 算法,包括原型、参数、用法示例和注意事项。原创 2025-05-29 09:00:00 · 652 阅读 · 0 评论 -
当你无法重构老代码,还能用 STL 吗?
本文探讨了如何将STL算法与不兼容STL的旧代码结合使用。通过自定义迭代器custom_insert_iterator,开发者可以将STL算法的结果输出到旧式结构中,而无需修改旧代码。文章首先介绍了问题的背景,即STL算法无法直接与旧代码接口兼容。接着,通过一个简单的例子展示了如何使用std::transform和std::back_inserter将结果保存到std::vector中,并提出了如何在不修改旧代码的情况下实现类似功能的问题。原创 2025-05-09 09:00:00 · 767 阅读 · 0 评论 -
C++ 名称隐藏的陷阱:为什么你的派生类函数调用失败?
在 C++ 继承体系中,当派生类(子类)和基类(父类)存在同名成员(成员变量或成员函数)时,派生类的成员会 屏蔽 或 隐藏 基类中同名成员的直接访问。这种情况通常被称为 名称隐藏(Name Hiding),也可以被称为 重定义(Redefinition),尤其是在函数的情况下。这里的“屏蔽”和“隐藏”是指,通过派生类的对象,直接使用成员名时,编译器会优先在派生类中查找。如果派生类中存在该名称的成员,则基类中同名成员将被隐藏,无法直接访问。原创 2025-04-30 09:00:00 · 780 阅读 · 0 评论 -
剖析 C++ STL 插入迭代器:原理与实践
对 std::inserter 内部机制的探究,我们不仅理解了它的工作原理,更体会到了 STL 设计者在处理动态容器和迭代器失效问题上的智慧。原创 2025-04-24 09:00:00 · 1113 阅读 · 0 评论 -
C++ STL 适配器:用更少的代码,实现更多功能!
STL适配器作为C++标准库中接口转换的核心工具,通过封装与重构组件接口,显著提升了代码复用性和开发效率。其核心价值体现在三个方面。原创 2025-04-02 09:00:00 · 1116 阅读 · 0 评论 -
引用(&)在 C++ 中究竟有什么用?全方位解析
本章节深入探讨了 C++ 中引用的概念,包括左值引用和右值引用。引用提供了操作对象成员的便捷方式,避免了指针操作的繁琐和潜在的错误。 其在面向对象编程中,特别是多态和设计模式的实现中扮演着关键角色。原创 2025-02-24 09:00:00 · 1109 阅读 · 0 评论 -
C++ 高效编程必知:STL 容器大小与容量的深度解析
虽然大小(Size)和容量(Capacity)这两个术语看起来非常相似,但混淆它们可能会导致程序效率低下甚至错误。本文深入探讨标准模板库(STL)容器的大小(Size)和容量(Capacity),并阐明两者的区别。大小(Size):指容器当前持有的元素数量,即从开始到结束迭代时所遇到的元素总数。这是一个容器基本属性的重要组成部分。容量(Capacity):指容器在不重新分配内存的情况下可以容纳的最大元素数。虽然有些容器允许通过接口访问容量,但这更多涉及到实现细节,和优化内存管理与时间复杂度相关。原创 2025-02-14 09:00:00 · 1719 阅读 · 3 评论 -
巧妙规避 C++ 模板类型推导:无需强制类型转换
本文分享了在使用 C++ 模板函数时,如何巧妙地处理不同类型参数,从而避免显式类型转换。当然,以上所有内容也适用于std::min。显式指定模板参数是一种更优雅、更安全的方法,它不仅简化了代码,还避免了潜在的运行时错误。理解模板类型推导机制以及临时对象的生存期对于编写高质量的 C++ 代码至关重要。原创 2025-01-13 09:00:00 · 1610 阅读 · 0 评论 -
C++小知识:模板类中如何定义和实现模板成员函数?
本文旨在讲解C++模板类中模板成员函数的定义和实现方法,并深入探讨其潜在的编译问题和解决策略。 我们将从模板的基本概念出发,详细解释如何在类内和类外定义模板成员函数,并阐述头文件与源文件分离时可能遇到的编译错误及原因。 此外,文章还将涵盖模板类型推导规则以及模板的高级特性,例如默认模板参数、非类型模板参数和模板特化,力求全面展现C++模板编程的技巧与陷阱。原创 2024-12-16 09:00:00 · 1570 阅读 · 0 评论 -
在 C++ std::set 中如何利用不同类型的值进行搜索?
C++14 引入了一个强大的特性,允许我们在关联容器中使用不同类型的键进行搜索,这对于使用自定义比较函数的 set 尤其有用。例如,我们可以使用员工的 ID 在一组包含 Employee 对象的集合中进行搜索,即使 ID 并不构成 Employee 对象的一部分。这项功能通过引入 is_transparent 类型别名来实现,它允许比较函数对象支持透明比较,进而使得 find 方法能够接受任何能够与集合元素进行比较的值。原创 2024-09-30 09:00:00 · 906 阅读 · 0 评论 -
C++ 移动迭代器:STL与移动语义的相遇
移动迭代器是 C++11 中移动语义的扩展应用,它允许在 STL 中进行高效的元素移动操作,提高代码效率和性能。然而,在使用移动迭代器时需要注意数据丢失问题,并可以通过范围库等工具简化代码表达。原创 2024-09-25 09:00:00 · 1080 阅读 · 0 评论 -
深入理解 C 语言流缓冲:setlinebuf,setbuffer,setbuf,setvbuf 解析
C 语言中的 setlinebuf、setbuffer、setbuf 和 setvbuf 函数,是控制流缓冲行为的关键工具。本文将揭秘这四个函数的功能和区别,并通过示例演示如何使用它们来优化程序性能,以及在不同场景下如何选择合适的缓冲模式。 同时,我们还会探讨缓冲区溢出的安全问题,并提供相应的解决方案。原创 2024-09-04 09:00:00 · 1951 阅读 · 0 评论 -
从内核到应用:Linux内核链表与C++ STL链表的细节探讨
在现代编程中,链表是一种重要的数据结构,其特性和应用场景各具特色。本文将探讨 Linux 内核链表与 C++ STL 链表的异同,揭示它们在设计哲学、性能以及使用场合上的差异。通过对两者的比较,读者将能够更好地理解这些链表的优缺点,从而选择最适合自己需求的链表实现方式。无论是在高效的操作系统开发中,还是在日常的应用程序开发中,深入了解链表的特性都有助于提升编程效率和代码质量。原创 2024-08-21 09:00:00 · 855 阅读 · 0 评论 -
进程间通信 IPC 完全指南:各种机制的原理与实战
在现代计算机系统中,进程间通信(IPC)是实现多任务协作和数据共享的核心技术。本文将探讨几种主要的IPC机制及其在操作系统和应用程序中的实际应用,帮助读者理解和应用这些关键技术。通过深入探讨管道、消息队列、共享内存、信号和套接字等IPC方式,我们将揭示它们的优缺点及选择的适用场景,为进程间通信的实现提供全面的指导和见解。原创 2024-07-25 09:00:00 · 2985 阅读 · 2 评论 -
探索 cartesian_product:更深入理解范围库
适配器是range-v3 库一个新的组件。本文主要理解这个组件的功能以及它背后的设计理念,可以更好地掌握range库。虽然可以通过研究zip适配器来理解这些内容,但是一个全新的适配器,探索它既可以掌握range库,也可以学习新技术,一举两得。为什么要花时间理解范围库呢?因为范围是 STL 的未来。STL 是一个强大的工具,可以编写富有表现力的代码,而范围库是一个设计精良的库,它将 STL 的功能推向了更远。简而言之,学习范围库可以了解编写富有表现力的 C++ 代码的趋势。原创 2024-06-13 09:00:00 · 1066 阅读 · 2 评论 -
探索C++ STL的设计方式:将算法与数据结构分离
本文介绍STL的设计方式,以及如何设计自己的组件,使其能够充分利用STL的功能。STL的设计旨在将算法与数据结构分离。头文件中的算法。当我们的需求无法通过标准算法解决时,我们自己编写的算法。标准STL容器,如std::map和。C 数组。用户定义的集合。上述内容的任何子部分。数据甚至可以从流中获取。通过“迭代器”接口,已经实现了将算法与数据结构分离的目的。为了从各种算法的众多优势中受益,数据必须具备迭代器接口。下面介绍了如何为不同类型的数据实现迭代器。原创 2024-06-11 09:00:00 · 790 阅读 · 2 评论 -
将多个元素高效地插入 STL 容器,提升C++代码性能
适用于已知要插入元素数量的情况,能够最大限度地减少内存重新分配,提升插入效率。assign适用于替换容器中所有元素的情况,但仅适用于序列容器,例如。当无法使用容器方法时,可以使用std::copy或std::copy适用于覆盖容器中已有元素或写入 C 数组的情况。适用于将算法结果添加到容器中,例如。了解容器的特性,选择最适合的插入方法。提前预估要插入的元素数量,避免频繁的内存重新分配。使用reserve方法预留空间,进一步提高插入效率。避免过度使用std::copy和。原创 2024-06-07 09:00:00 · 1250 阅读 · 2 评论 -
C++20 范围(Range):简化集合操作
在 C++20 中,范围概念要求一个对象同时拥有迭代器和结束哨兵。这在标准集合的上下文中非常有用,特别是在开发针对集合的操作算法(例如模板函数)时。原创 2024-06-02 21:39:54 · 2083 阅读 · 2 评论 -
用双重 Functor 技巧解决 STL 中的比较问题
当 C++11 出现时,Lambda 表达式被广泛用于之前使用 Functor 的地方。Lambda 表达式更优雅,需要更少的代码,并且可以完成 Functor 的大部分功能(几乎是,但并不完全)。使用 Lambda 表达式使代码更具表现力,但仍然有一些地方需要使用 Functor,其中之一就是“双重 Functor 技巧”。原创 2024-05-30 09:00:00 · 1743 阅读 · 2 评论 -
C++ STL 中的自定义比较:深入理解相等和等价
深入探讨了 STL 中自定义比较函数的使用,以及比较操作中相等和等价的概念。理解这些概念对于高效使用 STL 至关重要。原创 2024-05-28 20:56:10 · 1716 阅读 · 2 评论 -
C++ std::reference_wrapper:让引用更强大
std::reference_wrapper 是一个强大的工具,它扩展了 C++ 中引用的功能,使其更灵活、更安全。它可以用于:避免悬空引用: 它不能用临时对象初始化,因此可以有效地防止悬空引用问题。创建引用容器: std::reference_wrapper 是一个对象,可以作为 STL 容器的元素类型,从而允许创建引用容器。解决引用作为类成员的难题: std::reference_wrapper 可以作为类成员,使类可赋值,避免了引用成员带来的限制。按引用传递函数对象等。原创 2024-05-28 09:00:00 · 2334 阅读 · 1 评论 -
C++ STL 函数对象:隐藏的陷阱,如何避免状态带来的麻烦?
在使用 C++ 标准模板库 (STL) 时,函数对象 (Function Object) 是一种强大的工具,它可以帮助你编写更具表现力和更健壮的代码。函数对象本质上是可调用对象,它们可以像普通函数一样被调用,但同时可以拥有自己的状态和行为。本文将深入探讨函数对象,并重点讲解如何避免在函数对象中保存状态,从而使你的代码更简洁、更易于维护。本文深入探讨了 STL 函数对象,并重点讲解了避免在函数对象中保存状态的重要性。通过使用更高级的 STL 算法,例如count和find_if。原创 2024-05-26 09:00:00 · 1302 阅读 · 2 评论 -
现代C++ 如何使用 Lambda 使代码更具表现力、更容易理解?
对于对抽象级别透明的函数,请使用在调用点定义的匿名 Lambda。否则,将 Lambda 封装在一个中间函数中。原创 2024-05-25 09:00:00 · 977 阅读 · 2 评论 -
范围:C++ 代码的优雅进化,告别迭代器,拥抱更简洁的未来!
范围提高了使用 STL 的代码的抽象级别,因此清除了使用 STL 的代码中多余的迭代器。范围适配器是一个非常强大且具有表现力的工具,可以以模块化的方式对集合的元素应用操作。范围 提供了一种不同的 STL 使用方法,可以以非常优雅的方式解决这两个问题。范围最初是在 Boost 中引入的,现在正在走向标准化。原创 2024-05-24 09:00:00 · 1019 阅读 · 3 评论 -
C++ STL 算法的重要性:提高代码可读性和正确性的强大工具
STL 算法是一套强大的工具,可以提高代码的可读性和正确性。了解 STL 算法至关重要,因为它们可以极大地简化日常的编程任务。这篇文章将介绍如何使用 STL 算法,并解释它们能带来的一些关键优势。通过学习 STL 算法,开发者可以编写更加表达性和健壮的代码。学习所有 STL 算法需要时间和精力,但这是一项非常有益的投资。这些算法提供了强大的功能,可以显著提高代码的质量和表达能力。虽然 STL 算法库很庞大,包含了各种各样的算法,但这并不意味着需要全部掌握。相反,可以从最常用和最基础的算法开始学习,如。原创 2024-05-23 09:00:00 · 838 阅读 · 1 评论 -
C++ 关联容器:如何移除重复元素?一文即刻掌握
移除重复元素只有对包含“multi”的四种关联容器有意义。因为其他容器永远没有重复元素。对于multimap和,重复元素的概念可以有多种含义:两个元素可能具有相同的键,也可能具有相同的键和值。由于具有相同键的元素在容器中没有特定的顺序,无法在O(n)时间内移除 (键,值) 重复元素,因为它们可能不会相邻。因此,这里暂时不会考虑这种情况。这里只关注键来确定两个元素是否为重复元素。对于集合,由于键和值本身就是一个,所以没有歧义。注意,在 C++11 之前,是不知道最终保留哪个重复元素的。原创 2024-05-22 09:00:00 · 1970 阅读 · 0 评论 -
5分钟学会如何高效移除C++关联容器中的元素?
本文详细介绍了 C++ 关联容器中移除元素的多种方法,包括移除指定位置的元素、移除与特定键值等价的元素以及移除满足特定条件的元素。文章深入分析了关联容器的内部结构,解释了为何不能直接使用 std::remove_if 方法移除满足特定条件的元素,并提供了安全高效的 erase_if 函数实现。文章还强调了迭代器失效问题,并给出了避免未定义行为的正确迭代器操作方式。通过本文,读者可以掌握 C++ 关联容器中移除元素的各种技巧,并能够安全高效地操作关联容器。原创 2024-05-20 09:00:00 · 1093 阅读 · 1 评论 -
轻松解决C++ vector中指针删除难题!
这篇文章深入探讨了在C++中处理指针的向量时可能遇到的挑战,并提供了解决这些挑战的实用技巧。首先,它介绍了使用std::unique_ptr等智能指针来替代拥有原始指针的重要性,并展示了如何通过std::remove_if和std::erase等STL算法轻松处理智能指针。然后,文章着重讨论了在处理拥有原始指针的向量时可能出现的内存管理问题,以及如何避免悬空指针和内存泄漏。通过深入分析和实际示例,读者将学会如何更加安全和高效地管理指针,从而使他们的C++代码更加健壮和易于维护。原创 2024-05-19 09:00:00 · 1959 阅读 · 1 评论 -
4招轻松从C++序列容器中移除元素,你学会了吗?
本文讨论从集合中删除元素的STL算法。从C++集合中删除一个元素可能不复杂,也可能有点复杂。删除元素的方法在序列容器和关联容器之间是非常不同的。在序列容器中,vector和string是最常用的。但这里也会介绍deque和list以供全面了解,尽管在一般情况下可能不会使用它们。在给定位置(或在两个给定位置之间)删除元素;删除等于某个值的元素;删除满足某个谓词的元素以及删除重复项。下面来看看如何在STL序列容器中实现这四种命令。这就是C++中从序列容器中删除元素的方法。原创 2024-05-18 09:00:00 · 1407 阅读 · 0 评论 -
了解C++中STL的堆操作:构建、拆解和排序 堆(Heap)
本文将介绍如何在C++中利用STL(标准模板库)进行堆(Heap)操作,包括构建、拆解和排序堆的过程。首先,我们将对堆的概念进行简要介绍,然后重点讨论三个关键的STL函数:std::push_heap、std::pop_heap和std::sort_heap。通过实例和代码演示,读者将了解如何使用这些函数在C++中轻松地操作堆数据结构,从而加深对堆操作的理解并提升编程技能。原创 2024-05-14 09:00:00 · 490 阅读 · 2 评论 -
深入理解C++中的堆:从基本概念到实际应用
堆是一种具有树形结构的数据结构,它遵循堆属性,即:每个节点必须小于其每个子节点。“堆”这个名字可能来自于这样一个事实:如果堆放一堆东西并希望它能保持平衡,人类更愿意把大的东西放在底部,小的东西放在顶部:请注意,这与包含动态分配对象的内存区域中的堆完全无关(与栈相对,栈也是一种数据结构的名称)。堆的一个最重要的特性是,其最小元素位于其根部,易于访问。在堆中,每个节点理论上可以有任意数量的子节点。但在STL中,堆的节点有两个子节点,因此在本文中将用堆来指代二叉堆。原创 2024-05-13 09:00:00 · 3140 阅读 · 2 评论 -
轻松拆分C++字符串:标准、Boost和范围的比较分析
这篇文章探讨了在C++中进行字符串拆分的三种主要方法:使用标准库、Boost库以及范围。通过比较这三种方法的优缺点,读者可以了解到每种方法的适用场景以及性能特点。从最基础的流迭代器到Boost库的便利,再到未来可能的范围操作,本文全面剖析了这一常见任务的多种解决方案。通过深入了解每种方法的实现原理和使用技巧,读者可以在实际编程中选择最适合自己需求的方法,提高代码效率和可维护性。原创 2024-05-12 09:00:00 · 1066 阅读 · 1 评论