【发布时间】:2010-09-29 02:08:44
【问题描述】:
由于某种原因,以下代码失败。您不能简单地使用它的 base() 方法擦除 reverse_iterator。
#include <set>
#include <iostream>
int main()
{
std::set<int> setOfInts;
setOfInts.insert(1);
setOfInts.insert(2);
setOfInts.insert(3);
std::set<int>::reverse_iterator rev_iter = setOfInts.rbegin();
std::set<int>::reverse_iterator nextRevIter = setOfInts.rbegin();
++nextIter;
while ( rev_iter != setOfInts.rend())
{
// Find 3 and try to erase
if (*rev_iter == 3)
{
// SEGFAULT HERE
setOfInts.erase( rev_iter.base());
}
rev_iter = nextRevIter;
++nextRevIter;
}
}
如何正确执行上述操作?给定一个 reverse_iterator 对应于您要擦除的内容,您如何擦除它?
注意,不幸的是,erase 不会使用 reverse_iterators。它想要真实的东西。
【问题讨论】: