Re: Deleting items from std::list
"Howard Hinnant" <howard.hinnant@gmail.com> wrote in message
news:howard.hinnant-995E8D.08102226062006@syrcnyrdrs-01-ge0.nyroc.rr.com...
In article <1151276851.123572.175280@m73g2000cwd.googlegroups.com>,
"Markus Svilans" <msvilans@gmail.com> wrote:
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.
Is there a nice solution to this problem? Do I need to get a more
recent version of STLport?
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);
}
}
In case it gets lost in all the discussion of complexity, this is
the proper solution. Don't try to use reverse_iterators where
they're inappropriate -- just solve the problem.
P.J. Plauger
Dinkumware, Ltd.
http://www.dinkumware.com