首页 > 后端开发 > C++ > 如何使用反向迭代器安全地删除 STL 容器中的元素?

如何使用反向迭代器安全地删除 STL 容器中的元素?

Patricia Arquette
发布: 2024-11-23 05:00:09
原创
485 人浏览过

How to Safely Erase Elements from an STL Container Using a Reverse Iterator?

使用反向迭代器删除元素

使用 STL 容器时,使用反向迭代器擦除元素可能会带来挑战。默认情况下,擦除函数需要迭代器,而不是反向迭代器。

要解决此问题,有多种方法:

1.获取基迭代器:

标准将反向迭代器 (i) 与其对应的基迭代器 (i.base()) 之间的关系定义为 &*(reverse_iterator(i)) == & *(i-1)。这意味着您可以通过将 --() 应用于 i.base().

2 来获取基本迭代器。 C 11 特定解决方案:

在 C 11 中,您有两个附加选项:

  • std::next(i).base(): 这将返回对应于下一个元素的基本迭代器
  • std::advance(i, 1); i.base(): 这会将反向迭代器前进 1 并返回与其当前位置对应的基迭代器。

示例代码:

for (std::list<Cursor::Enum>::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i) {
  if (*i == pCursor) {
    // C++11 solution
    m_CursorStack.erase(std::next(i).base());

    // Alternatively, for pre-C++11 or if desired:
    m_CursorStack.erase(--(i.base()));
    break;
  }
}
登录后复制

通过遵循这些方法,您可以使用反向迭代器有效地从列表中删除元素,同时遵守标准要求。

以上是如何使用反向迭代器安全地删除 STL 容器中的元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板