IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

lambad expression std::for_each


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par d�faut lambad expression std::for_each
    Salut,

    Peut-on arr�ter un std::for_each :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		Data d;
    		std::for_each(map_rate[abo.GetCurrencyPair()].begin(),map_rate[abo.GetCurrencyPair()].end(),[&d,abo](const Data& data)
    		{
    			if(data.provider_ == abo.GetIdProvider())
    			{
    				d = data;
                                    //break; //un truc de ce style
    			}
    		}
    		);
    un return sort de for_each ou de la fonction englobant for_each ?
    merci

  2. #2
    la_tupac
    Invit�(e)
    Par d�faut
    Tu as essay� un continue ?

  3. #3
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Une lambda est cens�e �tre une fonction ; un return sort de la lambda, pas de la boucle dans laquelle est est appel�e (idem pour un break).

    Ta seule solution, c'est de proposer une autre impl�mentation pour for_each.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Boucle tant que callee retourne true
    // dès que callee retourne faux, on stoppe le traitement. 
    template <class InIt, class Callable>
    InIt for_each_until(InIt first, InIt last, Callable callee)
    {
      InIt current(first);
      while (current != last)
      {
        if (!callee(*current)) break;
        ++current;
      }
    }
    Et du coup,

    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
     
    Data d;
     
    for_each_until(
    	map_rate[abo.GetCurrencyPair()].begin(),
    	map_rate[abo.GetCurrencyPair()].end(),
    	[&d,abo](const Data& data) -> bool
    	{
    		if(data.provider_ == abo.GetIdProvider())
    		{
    			d = data;
    			return false;
    		}
    		return true;
    	}
    );
    Ceci dit, l'algorithme que tu souhaite utiliser, c'est find_if, par for_each.

    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
     
    Data d;
    mon_conteneur<T>::iterator id = 
    	std::find_if(
    		map_rate[abo.GetCurrencyPair()].begin(),
    		map_rate[abo.GetCurrencyPair()].end(),
    		[&](const Data& d) // même pas besoin de return type, 
    		                   // le compilateur va trouver tout seul !
    		{ 
    			return data.provider_ == abo.GetIdProvider(); 
    		}
    	);
    if (id != map_rate[abo.GetCurrencyPair()].end())
    {
      d = *id;
    }
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 15/11/2012, 11h53
  2. R�ponses: 5
    Dernier message: 13/07/2011, 18h56
  3. Am�liorations de std::for_each avec les foncteurs
    Par Invit� dans le forum D�buter
    R�ponses: 15
    Dernier message: 13/05/2010, 12h46
  4. R�ponses: 7
    Dernier message: 19/02/2010, 09h42
  5. [C++] std::for_each et this ?
    Par chronos dans le forum Langage
    R�ponses: 14
    Dernier message: 11/08/2009, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo