
C++
文章平均质量分 78
a.原味瓜子
这个作者很懒,什么都没留下…
展开
-
C++中的自定义排序:sort与priority_queue详解
我们可以通过提供比较函数或lambda表达式来自定义排序规则。的排序规则与sort有所不同,需要通过模板参数指定比较方式。// 小顶堆(升序)return 0;特性sort默认排序升序(less)降序(大顶堆,less)自定义比较函数返回值true表示a应该在b前true表示a的优先级低于b升序实现或greater或greater降序实现或less或less对象排序可在lambda中比较对象成员需要定义比较函数对象。原创 2025-04-09 17:12:15 · 527 阅读 · 0 评论 -
深入理解C++中的lower_bound和upper_bound
int age;// 按年龄排序return 0;和是C++标准库中强大的算法工具,特别适用于需要在有序序列中进行高效查找的场景。理解它们的精确语义和区别对于正确使用它们至关重要。通过结合使用这两个函数,可以实现许多高效的算法操作,如范围查询、有序插入和频率统计等。:找第一个不小于目标的位置:找第一个大于目标的位置两者结合可以精确确定一个值的所有出现位置使用时注意容器必须已排序实际项目中谨慎使用using namespace std。原创 2025-04-08 15:10:50 · 829 阅读 · 0 评论 -
深入理解背包问题:从理论到实践
背包问题(Knapsack Problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价值,在限定的总重量内,如何选择物品使得总价值最大。背包问题是动态规划的经典应用,掌握它对于理解算法设计思想至关重要。不同类型的背包问题有不同的状态转移方程,但核心思想都是通过构建状态表来记录最优解。实际应用中,需要根据具体问题选择合适的变体和优化方法。通过本文的学习,你应该已经掌握了:背包问题的基本概念和分类0-1背包和完全背包的动态规划解法背包问题的空间优化技巧。原创 2025-03-25 14:48:35 · 758 阅读 · 0 评论 -
深入理解埃拉托色尼筛法与线性筛法
埃拉托色尼筛法的基本思想是通过不断标记合数来筛选出素数。具体来说,对于每一个素数 p,从 p*p 开始标记所有的倍数为非素数,因为更小的倍数已经在之前被标记过。线性筛法通过优化标记过程,确保每个合数只会被它的最小素数因数标记一次,从而避免了重复标记。与埃拉托色尼筛法不同,线性筛法可以严格保持线性时间复杂度 O(n)。埃拉托色尼筛法是一个较为经典的素数筛选算法,适合中小规模的数据筛选,具有简单易懂的实现。线性筛法在进一步优化了筛选过程,能够在线性时间内完成素数筛选,特别适合大规模数据的处理。原创 2024-10-10 09:51:07 · 606 阅读 · 0 评论 -
深入理解 sscanf 和 sprintf:C/C++ 中的强大字符串处理函数
sscanfsprintfsscanf和sprintf是 C/C++ 中经典的字符串处理函数,提供了强大的格式化输入和输出功能。尽管它们不具备现代 C++ 中的类型安全和边界检查等优势,但在处理固定格式的字符串时,依然有其不可替代的灵活性和高效性。在现代 C++ 编程中,除非需要非常复杂的格式处理或需要与旧代码兼容,否则更推荐使用 C++11 引入的标准库函数,如std::stod和,来替代sscanf和sprintf。这样可以提高代码的可读性和安全性。原创 2024-09-12 23:41:44 · 1941 阅读 · 0 评论 -
C++ 中 vector 的常用功能介绍
在 C++ 中,vector是一种常用的动态数组容器,提供了方便的自动扩展、内存管理以及各种便捷的操作方法。它是 C++ 标准模板库(STL)的一部分,适用于需要动态存储和管理大量元素的场景。在本文中,我们将简要介绍vector的常用功能,展示如何对其进行操作和排序。为了简洁起见,假设我们已经使用了。原创 2024-09-12 21:08:31 · 563 阅读 · 0 评论