Bonjour,
j'aimerais supprimer un élément d'un conteneur list avec à l'aide de la fonction list::remove_if + un foncteur.
Bon, j'ai l'impression que VC6 ne veut pas. Trop vieux !
Et je ne peux pas en changer ...
Donc j'ai vu dans la faq qu'on pouvait utiliser l'idiome erase - remove.
J'avoue que je ne comprends pas pourquoi il faut utiliser un erase() en plus du remove() ???
Apparemment d'aprés la faq, "std::remove va déplacer les éléments à supprimer à la fin du conteneur, puis la fonction membre erase() va les supprimer définitivement".
C'est quand même bizarre non ?
Comme je stocke des pointeurs, il me faudrait les désallouer aussi. Ou vaut-il miex que je le fasse ? Dans mon foncteur ?
Voilà ce que j'ai fait :
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 struct PredFindByTime { private : DWORD limit; public: PredFindByTime(DWORD t) : limit(t) {}; bool operator () (const CRequest* pReq) const { //return (bool)( pReq->IsPending() == FALSE && (pReq->GetTime() + limit) < GetTickCount() ); if ( pReq->IsPending() == FALSE && (pReq->GetTime() + limit) < GetTickCount() ) { delete pReq; pReq = NULL; return true; } else return false; } }; m_listWaitingRequests.erase(std::remove_if( m_listWaitingRequests.begin(), m_listWaitingRequests.end(), PredFindByTime(lmSec) ) );
Partager