- 博客(117)
- 收藏
- 关注
原创 【C++】计算机数值表示:原码、反码与补码解析
本文系统介绍了计算机中数值的表示方法,重点解析了原码、反码和补码三种编码方式。原码直观但存在双零问题;反码改进后仍运算复杂;补码通过统一加减运算、消除双零歧义成为现代计算机标准。文章详细阐述了补码的计算规则和优势,并通过C++代码示例验证了补码的存储特性、按位取反运算及类型转换问题。最后总结了三种编码方式的差异,并指出实际开发中需要注意有符号/无符号类型混用、补码取值范围等问题。理解这些底层原理对编写高效代码和调试数值问题至关重要。
2025-09-14 09:29:50
1012
原创 【C++】深入解析C++ next_permutation用法
本文全面解析C++标准库中的next_permutation函数,介绍其生成字典序排列的基本概念、函数原型及工作原理。通过代码示例展示基础用法,包括整数序列、字符串排列及处理重复元素的方法,并说明如何通过自定义比较器实现特殊排序需求。文章还对比prev_permutation函数,提供进阶技巧与实际应用场景,如生成全排列、求解下一个更大元素问题等。最后总结关键点,强调初始序列需有序、支持自定义比较器等特点,指导读者高效解决各类排列组合问题。
2025-09-09 00:00:00
635
原创 【C++】解析C++十大排序算法(阅读量10w+,给免费!!)
本文全面解析C++十大排序算法,涵盖基础比较排序(冒泡、选择、插入)、高级比较排序(希尔、快速、归并、堆)和非比较排序(计数、桶、基数)。分析了各算法的核心思想、实现步骤、性能指标(时间复杂度、空间复杂度、稳定性)及优化策略。通过对比表格的不同算法的场景,为工程实践提供依据,特别针对小规模、中等规模和大规模数据给出具体建议。此外还介绍了C++标准库排序实现原理(introsort)和性能调优技巧,并列举了数据库索引、日志分析等典型应用案例。最后总结了排序算法面试常见问题及解题思路,为开发者提供全方位参考。
2025-08-14 23:02:22
668
原创 【C++】深度解析C++标准演进与核心语法体系
摘要:C++作为多范式编程语言,其语法体系随标准迭代不断演进。从C++98/03的基础面向对象特性,到C++11引入Lambda表达式、智能指针等现代特性,再到C++20/23新增概念、协程等高级功能,语言功能持续增强。C++语法体系包含基础框架(程序结构、数据类型、控制流)、核心范式(面向对象、泛型编程)以及现代特性(类型推导、智能指针、STL组件)。掌握C++需要理解其标准演进路径、基础语法规则以及不同编程范式的应用场景,同时结合项目需求选择合适的标准版本。
2025-08-11 22:14:00
961
1
原创 【C++】归并排序:高效稳定的分治之道
归并排序是一种基于分治法的经典排序算法,通过递归将序列分解为最小单元后合并排序。其核心步骤包括分解(将数组不断二分)和合并(将有序子序列逐步合并),时间复杂度稳定为O(nlogn)。该算法需要O(n)的额外空间,适合处理大规模数据和外部排序场景。优化策略包括对小规模子数组切换简单排序、索引存储优化等。归并排序的稳定性使其适用于多关键字排序,也可扩展应用于逆序对统计等场景。虽然空间效率不如快速排序,但其稳定的时间复杂度和清晰的实现逻辑使其在特定领域具有重要价值。
2025-08-11 20:28:55
900
原创 【C++】背包问题:C++动态规划全解析
本文系统讲解了背包问题的分类与动态规划解法,重点分析了0-1背包和完全背包问题。0-1背包通过二维/一维DP数组实现,需逆序遍历;完全背包则采用正序遍历。文中提供了C++代码实现,比较了各类背包的时间/空间复杂度,并介绍了多重背包的二进制拆分优化策略。作为经典的组合优化问题,背包问题在资源分配、投资决策等领域具有重要应用价值。文章通过清晰的代码示例和优化策略,帮助读者掌握动态规划解决背包问题的核心思路。
2025-07-23 10:42:50
1021
原创 【C++】分治算法:高效解决问题的核心策略
分治算法是一种通过"分解-解决-合并"三步解决复杂问题的经典算法思想。它将原问题拆解为独立子问题,递归求解后合并结果。典型应用包括归并排序(O(nlogn)时间)、快速排序和二分查找(O(logn)时间)。该算法要求问题具备可分解、独立和可合并三个条件。相比动态规划,分治算法的子问题相互独立;相比贪心算法,它需要合并子问题解。优化策略包括尾递归优化、平衡分解和高效合并,在图像处理、大数据和矩阵运算中应用广泛。
2025-07-22 12:06:57
1109
原创 【C++】分治算法:高效解决问题的核心策略
分治算法是一种通过分解、解决和合并三步解决复杂问题的高效算法思想。其核心是将问题拆分为独立子问题递归求解,再合并子问题解得到最终答案。该算法在排序、查找等领域具有广泛应用,典型代表包括归并排序(O(nlogn))和快速排序。分治算法需满足可分解性、独立性和可合并性三个条件,其性能受分解策略、合并效率影响。相比动态规划,分治算法的子问题相互独立;相比贪心算法,它需要合并子问题解。工程实践中,分治算法可结合并行计算优化性能,适用于图像处理、大数据分析等场景。掌握分治算法的关键在于培养问题拆解能力和高效的合并逻辑
2025-07-22 12:05:05
923
原创 【C++】字符串解析利器——istringstream详解
摘要:istringstream是C++标准库中的字符串输入流类,用于将字符串解析为结构化数据。核心功能包括:通过流运算符或成员函数读取数据,支持字符串分割、类型转换和复杂格式解析。典型应用场景包括配置文件解析、用户输入处理和数据格式转换。使用时需注意流状态管理、性能优化和编码兼容性。其优势在于类型安全、语法简洁和扩展性强,适合结合正则表达式处理复杂文本。关键技巧包括多态使用、错误处理和自定义分隔符。
2025-07-21 18:14:12
413
原创 【C++】递归巧解排列组合难题(详解)
本文概述递归在排列组合问题中的应用。递归通过分解问题为子问题实现高效求解:排列问题关注元素顺序,采用交换元素+回溯方法,时间复杂度O(n!);组合问题仅关注元素选取,通过选择/不选择+索引控制实现。两者在密码学、数据优化等领域有广泛应用,可通过剪枝、去重优化性能。需注意递归深度控制,掌握递归思想有助于理解分治等高级算法。
2025-07-20 20:27:17
488
原创 【C++】图论算法:核心解析与应用实践(详解)
本文概述了图论算法及其应用场景。图论算法通过处理顶点和边构成的图结构,在网络优化、任务调度等领域发挥重要作用。文章分类介绍了最短路径算法(如Dijkstra、Floyd)、最小生成树算法(Prim)、拓扑排序、网络流算法等核心算法及其时间复杂度。同时阐述了MATLAB等工具对图论算法的实现支持,包括图对象创建、内置算法和可视化功能。最后总结了图论算法在计算机科学、运筹学、工程技术等领域的实际应用价值,强调其通过算法与工具结合解决复杂网络问题的能力。
2025-07-20 16:55:22
638
原创 【C++(STL)】set集转成数组(详解)
摘要:C++ STL中的std::set是一个基于红黑树实现的有序关联容器,具有自动排序和去重特性,但不支持下标随机访问。可通过迭代器模拟数组遍历,使用std::next()定位元素(时间复杂度O(n))。适用于需要动态维护有序去重数据的场景,若需高效随机访问,建议改用std::vector配合排序去重。选择容器时应根据具体需求权衡排序、去重和访问效率等因素。
2025-07-19 17:30:50
304
原创 【C++】stoi的用法(详解)
std::stoi() 是 C++11 引入的标准库函数,用于将字符串转换为整数。与 atoi() 相比,stoi() 提供了更强大的功能,包括错误处理、支持指定进制等。其函数原型为 int stoi(const std::string& str, std::size_t* pos = nullptr, int base = 10),其中 str 为待转换的字符串,pos 用于存储无法转换字符的索引,base 指定进制(默认为十进制)。
2025-05-17 12:28:23
771
原创 【C++】volatile的用法(详解)
在C++中,volatile关键字是一种类型修饰符,用于指示编译器一个变量可能会被意想不到地改变,因此编译器不应该对该变量进行优化。在嵌入式系统编程、多线程编程或与硬件交互时,volatile经常被使用。这是因为这些环境中,变量的值可能会被外部因素修改,而不仅仅是程序代码本身。
2025-03-18 21:06:09
404
原创 【C++】boolalpha的用法(详解)
在C++中,boolalpha是一个流操纵符,用于控制布尔值在输出流中的表示方式。当使用boolalpha时,布尔值true和false会被输出为字符串"true"和"false",而不是默认的数值1和0。boolalpha可以用于std::cout(标准输出流)以及其他流对象,比如等。下面是对boolalpha。
2025-03-18 20:41:25
343
原创 【C++】memcpy函数、memmove函数和memset函数的用法(详解)
在C++中,memcpymemmove和memset是用于操作内存的标准库函数。它们在<cstring>头文件中定义,主要用于处理原始内存块。
2025-03-18 20:39:24
546
原创 【C++】搜索系列——记忆化搜索
记忆化搜索是一种用于优化递归算法的技术,特别适用于解决具有重叠子问题的问题。通过存储已经计算过的子问题结果,避免重复计算,从而显著提升效率。
2025-03-16 10:11:25
523
原创 【C++】递归与递推(详解)
递归是一种函数直接或间接调用自身的方法。在递归中,问题被分解为更小的子问题来解决,直到达到一个最简单的基本情况(Base Case),然后通过返回值逐步构建最终结果。递推是通过迭代或循环来解决问题的方法。通常是从基本情况开始,逐步计算出更复杂的情况,直到得到最终结果。递归和递推各有优劣,选择哪种方法需要根据具体问题、约束条件以及性能要求来决定。对于容易出现重复计算的情况(如斐波那契数列),递归的性能可能无法满足需求,而递推则会更高效。而对于自然适合分治或树状结构的问题,使用递归来实现逻辑可能更加直观清晰。
2025-03-16 10:06:46
1825
原创 【C++】回溯算法(详解)
回溯算法是一种通过逐步构建解决方案并在发现不符合条件时回退的算法技术。它通常用于解决组合优化问题,例如求解数独、八皇后问题、图的着色、旅行商问题等。在回溯算法中,我们尝试通过递归构建解空间树,并检查每个节点是否满足问题的约束条件。下面是一个关于八皇后问题的回溯算法的详细介绍及其对应的C++代码示例。八皇后问题要求在8x8的棋盘上放置8个皇后,使得它们互相之间不受攻击(即任何两个皇后都不处于同一行、同一列或同一对角线上)。
2025-03-16 10:02:11
384
原创 【C++】boolalpha的用法(详解)
在C++中,boolalpha是一个流操纵符,用于控制布尔值在输出流中的表示方式。当使用boolalpha时,布尔值true和false会被输出为字符串"true"和"false",而不是默认的数值1和0。boolalpha可以用于std::cout(标准输出流)以及其他流对象,比如等。下面是对boolalpha。
2025-03-16 09:59:22
577
原创 【C/C++】size_t的用法(详解)
size_t是 C 和 C++ 编程语言中定义在<stddef.h>或<cstddef>头文件中的一个无符号整数类型。它通常用于表示对象的大小(以字节为单位)以及数组和容器的索引。size_t的大小足以存储内存中任何对象的大小,因此在处理内存分配、数组遍历等情况时非常有用。
2025-03-15 19:52:09
789
原创 【C++】max_element的用法(详解)
/ 自定义比较函数,用于反向比较(即找出最小值)// 注意这里实际上是反向比较,用于找出“最小”值// 使用自定义比较函数} else {return 0;在这个例子中,我们通过传递一个自定义的比较函数compare给,实际上是在查找最小值,因为比较函数是反向的(即a > b而不是a < b// 自定义比较函数,用于反向比较(即找出最小值)// 注意这里实际上是反向比较,用于找出“最小”值// 使用自定义比较函数} else {return 0;
2025-03-15 18:16:43
1555
原创 【C++】transform函数的用法(详解)
是 C++ 标准库中的一个算法函数,它位于头文件中。这个函数用于对容器(如vectorlist等)中的元素进行某种形式的转换,并将结果存储到另一个容器中。提供了单范围和双范围的转换操作。
2025-03-14 22:43:34
1256
原创 【C++】哈希表(详解)
在C++中,哈希表(Hash Table)是一种非常重要的数据结构,用于高效存储和查找键值对(key-value pairs)。C++标准库中的提供了一个方便的哈希表实现。下面详细介绍的用法,并附上代码示例。
2025-03-09 10:25:34
589
原创 【C++】搜索系列——深度优先搜索(详解)
递归实现:简单直观,但对于深度较大的图可能会导致栈溢出。非递归实现:使用栈避免了递归的深度限制,但代码相对复杂一些。根据具体需求和图的特性选择合适的实现方式。
2025-03-09 09:57:14
601
原创 【C++】搜索系列——宽度优先搜索(详解)
宽度优先搜索算法在遍历过程中使用队列(queue)来记录待访问的节点。将起始节点放入队列中,并标记为已访问。从队列中取出一个节点,访问该节点,并将其所有相邻且尚未被标记的节点加入队列,并标记为已访问。重复步骤2,直到队列为空。
2025-03-07 21:55:25
357
原创 【C++】volatile的用法(详解)
volatile关键字在C和C++编程中用于告诉编译器,某个变量的值可能会在程序控制之外被改变。这意味着编译器不应该对该变量的访问进行优化,因为它假设变量的值可能会在程序的任何其他操作之外发生变化。这通常用于硬件访问、中断服务例程(ISR)或并行编程中。
2025-03-06 21:17:33
458
原创 【C/C++】jmp_buf的用法(详解)
jmp_buf是 C 和 C++ 标准库中的一个数据类型,用于保存程序的执行环境,以便稍后可以通过longjmp函数跳转回该环境。这种机制通常用于错误处理、特别是在不支持异常处理的 C 语言中。在 C++ 中,虽然更推荐使用异常来处理错误,但在某些情况下(如与 C 代码的互操作或特定的性能需求),jmp_buf仍然可能被使用。
2025-02-22 19:32:00
426
原创 【C++】二分算法介绍+图片(
二分答案(Binary Search for Answer)是一种在单调性基础上通过二分搜索来逼近问题解的算法。它常用于解决一些最优化问题,特别是那些可以通过“判定问题”来验证答案是否可行的问题。以下是对二分答案算法的详细介绍以及一个C++代码示例。
2025-02-22 18:12:24
488
原创 【C++】time函数的用法(详解)
time函数是 C++ 标准库中的一个函数,用于获取当前的系统时间(自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数)。这个函数在<ctime>头文件中定义。通过time函数,你可以获取一个time_t类型的值,表示当前时间的秒数。
2025-02-16 10:01:05
994
原创 【C++】generate的用法(详解)
是 C++11 引入的一个算法,用于为指定范围内的每个元素生成一个新值,并将这些值赋给该范围内的元素。它通常与生成器(如 lambda 表达式、函数对象或函数指针)一起使用,以按照某种规则生成一系列值。是一种非常灵活和高效的填充容器的方法,特别适用于需要根据某种复杂逻辑生成一系列值的场景。下面是一个详细的代码示例,演示如何使用。
2025-02-16 09:42:20
400
原创 【C++】make_any的用法(详解)
是 C++17 引入的一个类型安全的容器,它可以存储任何类型的单个值,并且能够在运行时查询和提取该值。在存储和提取值时提供了类型安全性。提取一个与存储类型不匹配的值,将会抛出一个。类型的对象,并将其包装在一个。对象的辅助函数,它可以简化。使用给定的参数来构造一个。之前,通常需要先使用。
2025-02-16 09:36:55
351
原创 【C++】sort_heap的用法(详解)
头文件中的一个函数,它用于对一个堆(heap)进行排序,将其转换为一个有序序列。只能在已经是一个堆的范围上调用。如果范围不是一个有效的堆,则排序结果将是未定义的。通过重新排列元素来将堆转换为一个有序序列。排序后的序列是以升序排列的(如果使用默认的。如果提供了自定义的比较函数,则排序顺序由该函数决定。或其他适当的堆操作函数来维护堆的性质。之前,目标范围必须是一个有效的堆。等堆操作函数一起使用。
2025-02-16 09:30:15
490
原创 【C/C++】qsort的用法(详解)
虽然它是 C 语言的一部分,但在 C++ 中也可以使用(尽管 C++ 通常推荐使用 STL 中的。可以对任意类型的数组进行排序,只要你提供一个比较函数来定义元素之间的顺序。是一个通用但相对低级的函数。在 C++ 中,更推荐使用 STL 中的。,因为它类型安全、易于使用,并且通常性能也更好。是 C 标准库中的一个通用排序函数,定义在。该函数返回一个整数,表示。
2025-02-16 09:25:45
571
原创 【C++】toupper函数和tolower函数(详解)
toupper和tolower是 C++ 标准库中的两个函数,用于字符的大小写转换。这两个函数都定义在<cctype>头文件中。以下是它们的详细介绍及代码示例。
2025-02-12 11:08:19
2475
问题 H: 能被M整除的 一段和
2025-02-24
剧院的座位问题(2010石中创新班练习)
2025-02-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人