AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 24
迭代器失效于
std::vector
C++ SELF
等级 24,
课时 0
解析为什么在修改
std::vector
时对元素的“绑定”(迭代器、引用和指针)会“失效”,
erase
和
push_back
操作有哪些危险,如何区分真正的失效与“指向了另外的元素”,以及应当使用哪些安全惯用法(依赖
erase
的返回值、存储
id
而不是
T
*
/
T
&
、通过
find_if
重新查找)。
std::remove_if 与 std::vector 的 erase-remove 惯用法
C++ SELF
等级 24,
课时 1
解析从
std::vector
批量删除元素的规范做法:为什么在循环中多次使用
erase
会导致跳过元素和多余的移动,
std::remove_if
如何执行“逻辑删除”并返回
new_end
,为什么尾部
[new_end, end)
不能被视为有效数据,以及第二步
erase(new_end, end)
如何把结果变为真正的删除。通过一个简单的任务追踪器示例来巩固这一惯用法。
为什么在循环中使用 erase 常出错
C++ SELF
等级 24,
课时 2
我们来分析一下,为什么在遍历时从
std::vector
中删除元素经常会破坏遍历:迭代器失效、由于
++
导致元素被跳过、错误的
end()
边界,以及在多次调用
erase
时突然退化到
O(N²)
。通过小型示例应用
TaskBook
和示意图可以看出
vector::erase
的实际行为,以及为什么要使用它返回的迭代器。
std::copy_if 和 std::transform
C++ SELF
等级 24,
课时 3
解析“重建数据模型”:如何在不修改原始
std::vector
的情况下安全地得到新结果(并且不使迭代器失效)。学习通过
std::copy_if
(使用模式
out_end
+
erase
)来过滤元素,以及通过
std::transform
(例如从
Task
→
std::string
)来转换元素。最后 — 常见错误:哪些位置不能通过
begin()
写入以及为什么算法不会自动“增长”向量。
在
std::vector
中的三种删除策略
C++ SELF
等级 24,
课时 4
我们剖析在 C++ 中从
std::vector
中“删除”元素的三种实用策略:通过
erase
的单点删除、通过
erase-remove
习语(
remove_if
+
erase
)的大规模清理,以及通过
rebuild
的方法,即使用
copy_if
/
transform
构建新结果。在 TaskTracker 小项目中讨论可读性、尾部移动的代价以及常见错误。
Please enable JavaScript to continue using this application.