AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 61
索引与数据一致性
C++ SELF
等级 61,
课时 0
讲解如何通过索引加速数据查找并同时不破坏一致性:为什么需要单一的“真实来源”,什么是不变式(invariant),如何构建
id
→ 位置 的方案和二级索引(
email
,
tag
),指针/迭代器指向
std::vector
元素时有什么危险,如何正确地通过
swap-erase
删除,什么时候值得
rebuild
索引,以及为什么
assert
可以在用户察觉之前更早地捕获不同步问题。
std::sort 与 std::stable_sort
C++ SELF
等级 61,
课时 1
我们把 C++ 中的排序视为对区间的操作,并比较
std::sort
与
std::stable_sort
:稳定性是什么意思,为什么“相等”的元素会“跳动”,如何通过比较器
comp
(函数
bool
)指定顺序,以及在实际场景中如何使用稳定排序——例如任务 UX 列表与多步骤多键排序。
比较器与
strict weak ordering
C++ SELF
等级 61,
课时 2
我们把比较器作为顺序契约来讲:如何理解
comp(a, b)
,为什么不能写
<=
/
>=
,什么是
strict weak ordering
(用 C++ 的术语—— concept
strict_weak_order
),等价关系
!
comp(a, b)
&&
!
comp(b, a)
是什么,为什么需要 tie-breaker,以及同一个比较器为何应在
std::sort
和
std::lower_bound
/
std::binary_search
中重用。
std::binary_search, std::lower_bound, std::upper_bound
C++ SELF
等级 61,
课时 3
我们来解析 C++ 中的一组二分搜索算法:如何通过
std::binary_search
快速检查键是否存在,如何通过
std::lower_bound
获取插入位置和“匹配候选”,以及如何通过
std::upper_bound
找到重复元素的右边界。单独强调一个重要的前提:区间必须用相同的顺序排序(相同的
operator<
或相同的比较器),否则结果不保证。通过对
struct Task
的搜索示例以及在小型应用 TaskBox 中维护有序性来巩固这些概念。
范围聚合:STL 中的 accumulate 及 min/max 查找
C++ SELF
等级 61,
课时 4
解析 C++(STL)中的“范围聚合”:如何通过
std::accumulate
将容器安全地归约为一个值(以及为什么结果类型由
init
参数决定)、如何通过
std::min_element
/
std::max_element
查找极值,以及如何使用
std::minmax_element
在一次遍历中同时得到两端界限。所有示例都基于小型应用
TaskBoard
使用
std::vector
,并附带常见错误分析。
Please enable JavaScript to continue using this application.