何らかの理由で、次のコードは失敗します。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 を取りません。それは本物が欲しい。