迭代时有效地从 std::vector 中删除元素
在 C 编程领域,开发人员经常遇到操作 std 的挑战::向量,同时遍历其元素。虽然迭代器为此任务提供了一种方便的机制,但在迭代期间尝试删除元素时会出现一个常见的陷阱。
考虑使用 std::vector<:string> 存储列表的场景文件的路径。目标是删除每个文件并从向量中删除其路径。然而,使用传统方法,例如擦除()方法,每次删除后都会使迭代器失效,从而使进一步的遍历变得复杂。
为了克服这一限制,开发人员设计了一种更有效的方法。调用时,erase() 方法不仅会删除指定元素,还会返回一个指向下一个元素的新迭代器。这种独特的行为允许循环顺利继续:
std::vector<:string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
if (::DeleteFile(iter->c_str()))
iter = m_vPaths.erase(iter);
else
iter;
}
在此代码片段中,循环按预期继续,每次删除后 iter 都会自动更新为指向下一个有效元素。这种有效的方法消除了对额外向量的需要,并简化了迭代时删除元素的过程。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3