迭代时有效地从 std::vector 中删除元素
在 C 编程领域,开发人员经常遇到操作 std::vector 的挑战::向量,同时遍历其元素。虽然迭代器为此任务提供了一种方便的机制,但在迭代过程中尝试删除元素时会出现一个常见的陷阱。
考虑 std::vector<:string> 的场景。用于存储文件路径列表。目标是删除每个文件并从向量中删除其路径。然而,使用传统方法,例如擦除()方法,每次删除后都会使迭代器失效,从而使进一步的遍历变得复杂。
为了克服这一限制,开发人员设计了一种更有效的方法。调用时,erase() 方法不仅会删除指定元素,还会返回一个指向下一个元素的新迭代器。这种独特的行为允许循环顺利继续:
<code class="cpp">std::vector<std::string>::iterator iter; for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) { if (::DeleteFile(iter->c_str())) iter = m_vPaths.erase(iter); else ++iter; }</code>
在此代码片段中,循环按预期继续,每次删除后 iter 都会自动更新为指向下一个有效元素。这种有效的方法消除了对额外向量的需要,并简化了迭代时删除元素的过程。
以上是如何在迭代时安全地从 std::vector 中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!