由于某种原因,以下代码失败。您不能简单地使用它的 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,您如何擦除它?
请注意,不幸的是,擦除不会采用 reverse_iterators。它想要真实的东西。