【信奥业余科普】C++ 的奇妙之旅 | 27:高效处理数据的利器——常用算法库(algorithm)
在前面的文章中,我们介绍了 C++ STL 中的各种容器。在实际编写程序和参加竞赛时,仅存储数据是不够的,通常还需要对数据进行各种操作,例如: - 将学生的成绩按照从高到低排序(sort); - 去掉数组中重复的数据(unique); - 在排好序的数据中用二分法快速查找某个数(lowerbound / upperbo...
已为您筛选出所有包含「#STL」标签的技术文章与算法真题
在前面的文章中,我们介绍了 C++ STL 中的各种容器。在实际编写程序和参加竞赛时,仅存储数据是不够的,通常还需要对数据进行各种操作,例如: - 将学生的成绩按照从高到低排序(sort); - 去掉数组中重复的数据(unique); - 在排好序的数据中用二分法快速查找某个数(lowerbound / upperbo...
上一篇文章我们介绍了 set 和 multiset,它们通过底层的红黑树实现自动去重、自动排序,以及在 时间内进行查找的机制。 但是,set 只能存放单一的元素(也就是 键 Key)。在很多实际的信奥问题或开发场景中,我们需要的是一种“对应关系”。例如: - 给你一个学生的名字(Key),你需要...
上一篇文章我们拆解了 deque 双端队列,并以此告别了“序列容器”的世界。在之前的文章中,无论是 vector、stack、queue 还是 deque,元素都是按照我们 插入的顺序 排列的。如果想要查找某个元素是否存在,在没有排序的情况下,我们只能从头到尾挨个找,时间复杂度是 。 如果我们需要一个容器,...
上一篇文章介绍了 stack 和 queue,它们本质上是容器适配器,底层默认使用的容器就是 deque。我们提到 deque 能同时做到头尾操作 和下标随机访问 ,比 vector 灵活得多。 这篇文章就来拆解 deque 的内部结构,看看它是怎么做到这些的。
上一篇文章我们介绍了 vector 动态数组。vector 支持末尾追加、下标随机访问、中间插入删除等操作,功能非常灵活。 既然 vector 已经足够通用,为什么 STL 中还要专门提供 stack(栈)和 queue(队列)? 这就引出了软件工程中一个重要的设计思想:主动限制权限。在"撤销操作"或"排队处理"等场景...
上一篇文章介绍了 STL 的整体设计思想——容器、迭代器、算法三层架构。从本篇开始,我们将逐一深入 STL 中最常用的容器。 第一个要详细展开的,自然是 vector——信奥中使用频率最高的容器,没有之一。
在前面的二十篇文章中,我们从底层的"0和1"、变量的内存布局,一路讲到了函数、指针与引用。到目前为止,我们已经掌握了 C++ 中最基本的构件。 但在实际的软件开发中,如果每次遇到问题都要从零开始手写数组管理、排序算法,效率就太低了。为了解决这个问题,C++ 提供了一套功能强大的标准工具集——STL(Standard T...