Re: deleting vector elements while looping thru it
On Apr 11, 4:50 pm, "kafe...@hotmail.com" <kafe...@hotmail.com> wrote:
What is the typical way to loop through a vector while deleting
certain elements during the loop process? The code below works, but I
am wondering if there is a better solution.
vector<int> vTmp;
vTmp.push_back(1);
vTmp.push_back(2);
vTmp.push_back(1);
vTmp.push_back(2);
vTmp.push_back(1);
vTmp.push_back(1);
for(int x=0; x<vTmp.size(); x++)
{
if(vTmp[x]==1)
{
vTmp.erase(vTmp.begin()+x,vTmp.begin()+x+1);
x--; //to account for new size
}
}
Others have pointed out the solution using remove or remove_if,
which handles this specific case. More generally, if you're
possibly doing a number of other things, or for some other
reason prefer writing the loop yourself:
std::vector<int>::iterator current = v.begin() ;
while ( current != v.end() ) {
// ...
if ( shouldBeDeleted ) {
current = v.erase( current ) ;
} else {
++ current ;
}
}
can be used. (Note that in the case of vector, this is likely
to result in a lot more copying than using std::remove. If the
container is a list, however, it's probably more efficient. And
of course, unless the container is very big, and the types
expensive to copy, it generally doesn't matter.)
--
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