- 博客(478)
- 收藏
- 关注
原创 【C++练习】44.内存区域
说明:现代 C/C++ 实现中常将内存逻辑划分为栈、堆、全局/静态区、常量区、代码区;其中“静态存储区”对应全局/静态数据,“常量区”通常存放字符串字面量等只读数据,二者生命周期均贯穿程序运行期。
2025-11-17 18:00:43
580
原创 【C++练习】43. 虚函数表与 vptr 的时机与代码验证
把握 vtable 与 vptr 的时机,直接影响程序的正确性、性能与可维护性。在工程实践中,这些知识能指导接口设计、对象生命周期管理、二进制兼容、性能优化与故障排查等关键决策。
2025-11-17 17:47:40
1004
原创 【算法】线性回归在机器人中的应用
要点:用 ORB 提取与 BFMatcher/比率测试 做匹配;单目 VO 的尺度需借助轮速计/IMU/标定物或回环闭合来稳定。要点:RANSAC 提升对动态物体与误匹配的鲁棒性;PredictionErrorDisplay/LearningCurveDisplay 有助于快速诊断欠/过拟合与标定质量。下面示例用 OpenCV 从二值化图像中提取白色像素,拟合y = kx + b,并据此计算航向角与横向偏差,可直接用于差速底盘的速度与角速度指令生成(示例为离线仿真,嵌入式可替换为摄像头帧回调实时运行)。
2025-11-15 12:34:17
94
原创 【算法】线性回归实战思路
要点:将标准化与多项式特征放入Pipeline,在GridSearchCV中同时搜索多项式阶数与正则化强度;回归评分使用neg_mean_squared_error;要点:用cross_val_score完成K 折交叉验证,回归任务选择neg_mean_squared_error等指标;用cross_val_predict获取每折的验证集预测,便于可视化诊断。要点:时间序列严禁随机划分,应使用TimeSeriesSplit;特征构造(如趋势 t、季节正弦/余弦)应在每折内仅用历史信息;
2025-11-14 16:54:40
129
原创 【算法】定义和类别
计算机算法是为了解决某一类问题而设计的、由有限且明确的指令组成的计算过程。它从给定的输入出发,经过一系列清晰定义的状态转移,在有限步骤内产生输出并终止。算法可用自然语言、伪代码、流程图或编程语言描述,其形式化基础与图灵机等可计算性理论密切相关,强调可被计算机实现与模拟。
2025-11-13 15:54:20
158
原创 【C++练习】42. 归并排序
归并排序是一种典型的分治算法,通过递归拆分与合并实现排序。其核心过程包括:递归将数组对半分割至单元素子数组,然后通过双指针比较合并有序子数组。该算法时间复杂度为O(nlogn),空间复杂度O(n),具有稳定性。实现方式多样,包括经典递归法、迭代法(避免递归开销)、STL库函数法以及并行优化版本(利用多线程)。优化方向主要围绕减少空间使用,如原地归并或交替使用辅助空间。各种实现均遵循"分而治之"原则,在保证效率的同时提供了灵活的编码选择。
2025-11-12 08:15:00
842
原创 【C++练习】41. 快速排序
快速排序是一种高效的基于分治的排序算法,通过递归分区实现排序。其核心步骤包括选择基准值(如首元素、末元素或随机元素)、分区(将数组分为小于和大于基准的两部分)和递归排序子数组。典型实现采用Lomuto分区方案,时间复杂度平均为O(n log n),最坏情况为O(n²)。优化方法包括随机化基准选择、三数取中法、小数组切换插入排序以及迭代实现避免递归开销。还提供双指针Hoare分区和三向切分处理重复元素的改进方案。
2025-11-12 08:00:00
1900
原创 【C++练习】40. 约瑟夫环问题
本文介绍了约瑟夫环问题的两种主要解法。第一种是使用循环链表模拟整个过程,通过创建循环链表并依次删除第k个节点来实现,该方法直观但效率较低。第二种是数学递归解法,利用递推公式直接计算最后幸存者的位置,效率更高但仅适用于求解最终结果。文章还提供了各方法的C++实现代码,并比较了它们的优缺点。对于特殊情况k=2,还给出了时间复杂度O(1)的优化解法。实现时需注意链表方法的内存管理以及递归可能导致的栈溢出问题。
2025-11-11 08:15:00
2214
原创 【C++练习】39. C++计算组合数 C(n, k)
本文介绍了计算组合数C(n,k)的多种方法。递归法简单直观但效率低(O(2^n));动态规划法通过存储中间结果优化到O(n×k)时间;空间优化版动态规划进一步降低空间复杂度至O(k)。公式法直接计算效率最高(O(k)),但需注意数值溢出。对于大数取模需求,可使用预处理阶乘和逆元的方法,查询时间为O(1)。文章通过代码示例比较了各方法优缺点,为不同应用场景提供了计算组合数的解决方案。
2025-11-11 08:00:00
1353
原创 【C++练习】38. C++判断平衡二叉树
摘要:本文介绍了判断平衡二叉树(AVL树)的多种方法。平衡二叉树的定义要求每个节点的左右子树高度差不超过1。基本递归方法通过计算子树高度差判断,时间复杂度O(n²);优化版本在计算高度时同步检查平衡性,将复杂度降至O(n)。还提供了基于层次遍历的迭代解法以及优化空间的Morris遍历法。优化后的递归方法最推荐,其在保证线性时间复杂度的同时代码简洁高效,是实际应用中的首选方案。文中包含C++实现代码和详细的时间复杂度分析。
2025-11-10 08:15:00
549
原创 【C++练习】37. C++计算幂函数
本文介绍了C++中计算幂函数的多种方法及其实现。主要包括:迭代法(O(n)时间复杂度)、快速幂法(O(log n))、递归法以及标准库函数pow()。详细代码示例展示了每种方法的实现,包括处理负指数和边界条件。比较了各种方法的适用场景:快速幂适合大整数幂计算,库函数适合浮点运算,而模板元编程可实现零开销编译期计算。文章还指出需注意的精度误差、溢出问题及负数指数处理。根据需求可选择不同方法,其中快速幂法是效率与通用性的较优选择。
2025-11-10 08:00:00
1677
原创 【C++代码】36. C++二分查找
二分查找是一种在有序数组中高效查找元素的算法,时间复杂度为O(log n)。其核心思想是通过不断缩小搜索范围,每次比较中间元素与目标值来调整查找区间。关键实现要点包括:防止整数溢出的mid计算方式(left + (right - left)/2)、正确的循环终止条件(left <= right)以及边界更新的合理性。标准C++库提供了binary_search、lower_bound等实现。此外,二分查找有多种变体,如查找第一个/最后一个等于目标值的索引,可通过调整边界条件实现。算法支持迭代和递归两种
2025-11-09 08:15:00
641
原创 【C++练习】35. C++汉诺塔问题
汉诺塔问题是一个经典的递归问题,目标是将n个盘子从源柱移动到目标柱,遵循每次移动一个盘子且大盘不能压小盘的规则。核心解法包括递归和迭代两种方法:递归通过分解子问题实现,时间复杂度O(2^n),空间复杂度O(n);迭代使用栈模拟递归过程。数学公式表明最少需要2^n-1步完成。此外还存在双色汉诺塔、循环汉诺塔等变种问题。该问题展示了递归思想的精髓,是算法学习的典型案例。
2025-11-09 08:00:00
2252
原创 【C++练习】34. C++输出给定区间内的所有素数
本文介绍了四种输出区间素数的算法实现:1)暴力法通过试除法逐个判断,适合小区间;2)埃氏筛法通过标记非素数高效筛选,适合中等区间;3)欧拉筛法优化标记过程实现线性复杂度;4)分段筛法处理极大区间。重点分析了埃氏筛法的实现步骤,包括初始化布尔数组、标记非素数和结果输出。对比指出暴力法简单但效率低(O(n√n)),而筛法效率更高(O(n log log n))。建议根据区间大小选择算法,小范围用暴力法,大范围优先使用筛法,并注意输入合法性校验。
2025-11-08 08:15:00
1219
原创 【C++练习】33. 统计字符串中元音字母
本文介绍了统计字符串中元音字母的多种方法,包括循环遍历、标准库算法、正则表达式、位运算优化和查找表技术。核心思路是通过遍历字符串字符,检查其是否为a、e、i、o、u及其大写形式并进行计数。不同方法各有优势:循环遍历简单直观,标准库算法代码简洁,正则表达式适合复杂匹配,位运算和查找表则优化性能。文中提供了C++实现示例,涵盖了从基础到优化的完整解决方案,适用于不同场景需求。
2025-11-08 08:00:00
380
原创 【C++练习】32. 计算最小公倍数(LCM)
本文介绍了计算最小公倍数(LCM)的四种方法。核心方法是利用最大公约数(GCD)通过公式LCM=|a×b|/GCD(a,b)实现,包括递归法、C++标准库法。还提供了迭代法和STL扩展方法处理多个数的LCM计算。关键点包括处理零值、防溢出措施和输入验证。时间复杂度主要取决于欧几里得算法,为O(log(min(a,b)))。建议根据实际需求选择适当方法,对大数运算可使用更长数据类型或优化算法。
2025-11-07 08:15:00
1638
原创 【C++练习】31. C++计算最大公约数(GCD)
本文介绍了C++中计算最大公约数(GCD)的多种方法。主要包括欧几里得算法的递归和迭代实现,更相减损法以及C++17标准库方法。针对性能优化,讨论了避免递归、使用内置函数、处理特殊情况等技巧,并介绍了二进制GCD算法和硬件优化方案。文章还提供了处理负数和零的代码示例,建议根据数值大小和调用频率选择合适的算法,如小整数用欧几里得算法,大整数用二进制GCD等。
2025-11-07 08:00:00
1203
原创 【C++练习】30. C++根据用户输入的行数打印菱形。
摘要 该C++程序实现了根据用户输入行数打印菱形的功能。核心思路是将菱形分解为上三角和下三角两部分,通过循环控制空格和星号的输出。程序自动将偶数行数调整为最近的奇数以确保对称性,上三角部分星号递增,下三角部分对称递减。代码演示了如何使用嵌套循环结构实现图形输出,并提供了多种扩展方法,包括数学公式生成、二维数组存储、递归分形等图形处理技术。该实现展示了C++基础控制结构的典型应用,适用于初学者学习循环和条件控制的基本原理。
2025-11-06 15:41:33
1118
原创 【C++练习】29. 生成随机数,用户猜测并提示大小
摘要:本文介绍了一个简单的猜数字游戏实现,使用C++编写。程序通过srand()和rand()生成1-100的随机数,用户输入猜测后程序会提示"太大"或"太小",直到猜中为止。代码解析了随机数生成原理、游戏循环结构和输入比较逻辑,并提供了可能的改进方向,如输入验证和难度选择。该程序展示了C++的基本语法和编程逻辑,适合初学者学习使用。完整代码示例包含初始化、游戏循环和结果反馈等完整功能。
2025-11-06 15:34:55
600
原创 【C++练习】28.比较两个字符串是否相等
在C++中,除了C语言标准的 “strcmp” 函数,你还有多种方法可以比较两个字符串是否相等,特别是当你使用 “std::string” 类时,操作会更加简便直观。C++的 “std::string” 类重载了 “==” 运算符。这是比较两个 “std::string” 字符串最推荐的方式,因为它和比较基本数据类型(如 “int”)一样简单直观。“compare()” 函数提供了更详细的比较信息,不仅限于判断是否相等。“char*”)且不能使用 “strcmp”,可以手动实现比较逻辑。
2025-09-25 17:41:10
1190
原创 【C++练习】27.在C++中连接字符串而不使用“strcat“函数
性能关键场景:在需要循环拼接大量字符串时,使用 “reserve()” 函数预先为 “std::string” 分配足够的空间,可以避免反复重新分配内存,从而大幅提升 “+=” 或 “append()” 的效率。直接对两个C风格字符串字面量(如 ““Hello” + “World””)使用 “+” 是错误的。需要注意的是,“stringstream” 的性能通常不如直接使用 “std::string” 的运算符或成员函数,因此更适用于调试、日志记录等对性能不敏感的格式化输出场景。
2025-09-25 17:15:06
1163
原创 【C++练习】26.在 C++ 中,不使用 “strcpy“ 函数将一个字符串复制到另一个字符串
在 C++ 中,不使用 “strcpy” 函数将一个字符串复制到另一个字符串有多种方法,主要可分为使用 C 风格字符数组 和 C++ “std::string” 类 两大方向。
2025-09-21 15:26:52
652
原创 【C++练习】25.在不使用标准库函数 “strlen“ 的情况下,C++ 中计算字符串长度
方法优点缺点适用场景计数器循环直观易懂,效率高需要维护一个计数器变量一般场景,最常用指针算术代码相对简洁,效率高需要理解指针运算追求代码简洁和效率的场景递归代码形式简洁,不创建局部变量计数器递归开销大,可能栈溢出,性能较差对代码简洁性有要求且字符串长度可控的场景这些方法本质上都是遍历字符串直到遇到空字符“’\0’”,时间复杂度都是 O(n),其中 n 是字符串的长度。对于 C++ “std::string” 对象,不应使用上述方法。
2025-09-21 15:13:25
874
原创 【C++练习】24.在 C++ 中判断一个数是否在数组中
方法适用场景优点缺点时间复杂度基础循环简单场景,小数组,C风格数组实现简单,控制力强代码稍显冗长O(n)通用场景,尤其是"std::vector"等STL容器代码简洁,标准库实现需要理解迭代器O(n)只需判断是否存在,代码可读性优先语义明确无法直接获取位置O(n)数组已排序效率极高要求数据必须先排序O(log n)哈希表 (“std::unordered_set”)频繁查找,数据不重复平均效率最高需要额外内存,不保持顺序平均O(1)
2025-09-19 08:08:19
903
原创 【C++练习】23.冒泡排序
特性/方法基础实现优化实现 (提前终止)模板化实现核心思想两层循环遍历比较增加交换标志位,若某轮无交换则提前终止使用模板,支持多种数据类型时间复杂度(平均)O(n²)O(n²),但对已有序序列最优情况为O(n)O(n²),最优情况O(n)空间复杂度O(1)(原地排序) O(1)O(1)稳定性稳定 (相等元素不改变相对顺序)稳定稳定适用场景教学理解小规模数据或可能部分有序的数据需要排序多种基本数据类型的小规模数据集。
2025-09-19 07:50:37
725
原创 【C++练习】22.C++中,查找数组中的最大值和最小值
将数组分成两部分,分别查找每部分的最大值和最小值,然后比较两部分的结果,得到整个数组的最大值和最小值。在C++中,查找数组中的最大值和最小值有多种方法。:通过循环遍历数组,逐个比较数组中的每个元素,更新最大值和最小值。这些方法各有优缺点,可以根据具体需求和场景选择合适的方法。:通过递归函数逐个比较数组中的元素,更新最大值和最小值。:使用 C++11 的 Lambda 表达式结合。函数来查找数组中的最小值和最大值。:使用 STL 容器(如。)来查找最大值和最小值。来查找最大值和最小值。
2025-09-15 16:23:42
936
原创 【C++练习】21.C++中,计算数组元素的平均值
通过循环遍历数组,将所有元素累加到一个变量中,然后将累加结果除以数组的长度,得到平均值。:使用指针来遍历数组,将数组的每个元素累加到一个变量中,然后计算平均值。这些方法各有优缺点,可以根据具体需求和场景选择合适的方法。:使用 C++11 的 Lambda 表达式结合。函数来计算数组元素的总和,然后除以数组的长度。)来遍历数组,累加元素值,然后计算平均值。:使用 C++11 的范围循环(来计算总和,然后计算平均值。:使用 STL 容器(如。
2025-09-15 16:21:14
841
原创 【C++练习】20.模拟掷骰子的核心是生成1到6之间的随机整数
rand()函数:简单易用,但随机性较差。<random>库:提供高质量的随机数生成器,适合需要高质量随机数的场景。和:适合需要随机打乱顺序的场景。:适合模拟非均匀分布的情况。:适合随机选择一个或。
2025-09-14 14:00:10
1376
原创 【C++练习】19.判断一个字符是元音还是辅音
通过if-else语句逐一判断字符是否为元音字母(a、e、i、o、u),如果不是元音且为字母,则为辅音。以上是几种常见的判断字符是元音还是辅音的方法,你可以根据具体需求选择合适的方法。语句逐一判断字符是否为元音字母,如果不是元音且为字母,则为辅音。:将元音字母存储在数组中,通过遍历数组判断字符是否为元音。:将判断逻辑封装到一个函数中,使代码更加模块化和可重用。:将元音字母存储在字符串中,通过字符串的。方法判断字符是否为元音。
2025-09-14 13:56:23
800
原创 【C++练习】18.C++求两个整数的最小公倍数(LCM)
最小公倍数(LCM)是指能够同时被两个数整除的最小的正整数。在C++中,有几种常见的方法可以计算两个整数的最小公倍数。这种方法通过逐个测试较大的数的倍数,直到找到能被两个数都整除的数。这种方法是最推荐的,因为它高效、简洁且能处理各种边界情况。将两个数分解质因数,然后取每个质因数的最高幂次相乘。
2025-09-13 16:37:10
787
原创 【C++练习】17.C++求两个整数的最大公约数(GCD)
在C++中,计算两个整数的最大公约数(GCD)有多种方法,下面我将介绍几种常见的方法及其实现。gcd(a, b) = gcd(a-b, b) (当a > b时)在实际应用中,推荐使用欧几里得算法(辗转相除法)或C++17的。"std::gcd"函数,因为它们既高效又简洁。
2025-09-13 16:33:05
882
原创 【C++练习】16.C++将一个十进制转换为二进制
以上是C++中将十进制数转换为二进制数的几种常见方法。每种方法都有其适用场景和优缺点。在实际开发中,可以根据具体需求选择合适的方法。在C++中,将一个十进制数转换为二进制数有多种方法。:通过不断地将十进制数除以2,取余数,然后将余数逆序排列,得到二进制表示。:通过递归的方式,将十进制数除以2,取余数,然后对商继续递归,直到商为0。方法可以直接将十进制数转换为二进制字符串,而不需要指定大小。类,可以方便地将十进制数转换为二进制表示。:通过位运算,逐位提取二进制表示。:C++标准库提供了。
2025-09-12 11:57:19
1052
原创 【C++练习】15.在C++中,反转字符串有
通过两个指针,一个指向字符串的开头,另一个指向字符串的结尾,然后交换这两个指针所指向的字符,逐步向中间移动,直到两个指针相遇。以上是C++中反转字符串的几种常见方法,每种方法都有其适用场景和优缺点。:通过递归的方式,将字符串的最后一个字符移到前面,然后对剩余的字符串继续递归反转,直到字符串为空。:利用栈的后进先出(LIFO)特性,将字符串中的字符依次压入栈中,然后再依次弹出,从而实现反转。函数,可以直接反转容器中的元素。:通过手动交换字符串中的字符来实现反转,这种方法与双指针方法类似,但不使用。
2025-09-12 11:52:32
705
原创 【C++练习】14.C++统计字符串中字母、数字、空格和其他字符的个数
这种方法利用了C++标准库中的字符分类函数,是最直接和可读性最好的方法。它逐个检查字符串中的每个字符,使用专门的函数来判断字符类型。这种方法基于ASCII字符编码的特性,直接比较字符的ASCII值来判断类型。这种方法使用switch语句和case范围(GCC扩展)来实现字符分类,展示了另一种控制流结构的使用方式。"count_if"函数,配合lambda表达式来实现字符分类统计,体现了函数式编程的思想。我将详细讲解上述四种方法的思考逻辑和代码含义,帮助你理解每种方法的实现原理和适用场景。
2025-09-11 15:28:33
1389
原创 【C++练习】13.C++输出九九乘法表的方法详解
方法优点缺点适用场景双重for循环简单直观,易于理解代码重复性高基础教学,简单需求while循环循环控制更灵活代码稍显冗长需要灵活控制循环的场景递归实现展示递归思想,代码优雅递归深度限制,效率略低教学递归概念格式化输出输出美观整齐需要额外头文件需要精确控制输出的场景函数封装模块化,可重用增加函数调用开销大型项目,代码复用倒序输出展示不同输出顺序非常规需求特殊需求或教学目的在实际开发中,双重for循环和函数封装是最常用的方法,因为它们既简单又实用。
2025-09-11 15:22:05
898
Markdown基本语法用于撰写帮助文档或是用于论坛上发表消息
2023-12-05
ubuntu新手使用教程文件管理命令大全
2023-12-05
做数字人主播遇到个小问题
2023-12-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1