使用反向迭代器擦除列表元素
在 C 中,std::list 容器中的擦除函数需要一个迭代器参数。不过,你可能会遇到需要使用反向迭代器(std::list::reverse_iterator)删除元素的情况。
解决方案:
根据根据 C 标准,反向迭代器 i 与其基迭代器之间存在以下关系i.base():
&*(reverse_iterator(i)) == &*(i - 1)
这意味着反向迭代器指向紧随其基迭代器指向的元素之后的元素。
使用反向迭代器擦除元素,您需要应用偏移量来获取基迭代器:
m_CursorStack.erase(--(i.base()));
此表达式有效地将基迭代器减一,从而指向要擦除的元素。
其他解决方案(C 11 及更高版本):
m_CursorStack.erase(std::next(i).base());
std::advance(i, 1); m_CursorStack.erase(i.base());
这些解决方案更多比原来的方法更简洁、更清晰。选择最适合您要求的一个。
以上是如何使用反向迭代器从 C `std::list` 中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!