questrion sur le remove_if erease et contenaire
Bonjour,
dans la faq,
il existe ce code pour enlever les element d'un contenaire
Code:
1 2
| std::vector v;
v.erase(std::remove_if(v.begin(), v.end(), std::bind2nd(std::greater<int>(), 3)), v.end()); |
En y reflechissant, pourquoi cela est correcte??
avant le erase, std::remove_if et v.end sont appelé l'un aprés l'autre. Seulement es ce bien sur que ce soit dans cette ordre?
Par exemple si v.end() est appelé en premier puis remove_if, le resultat de v.end est erroné!!
Pour un vector ca va souvent marcher car les iterator sont souvent un simple pointeur et que la memoire est contigue.
Mais pour les autres???
ce code me semble plus correcte.
Code:
1 2 3
|
std::unContenaire<x>::iterator newEnd = std::remove_if(v.begin(), v.end(), std::bind2nd(std::greater<int>(), 3));
v.erase(newEnd , v.end()); |