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) ) );
@+