M
Markus Schoder
Howard said:Markus Svilans said:std::list<int> data;
// [ code here to load data with values ]
std::list<int>::reverse_iterator ri = data.rbegin();
while (ri != data.rend())
{
// Get next iterator in case ri is erased.
std::list<int>::reverse_iterator next = ri;
++next;
// Check if ri needs to be erased
if (*ri == VALUE_TO_ERASE)
{
// [ code here to process *ri before erasing ]
data.erase(ri); // <-- Causes compiler error
}
ri = next;
}
Obviously an erase method is not defined for reverse iterators in
std::list.
The solution below is better but just for completeness sake
data.erase(ri.base());
should work.
for (std::list<int>::iterator ri = data.end(); ri != data.begin()
{
if (*--ri == VALUE_TO_ERASE)
{
// [ code here to process *ri before erasing ]
ri = data.erase(ri);
}
}