C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: problèmes avec algo generique ( find (); )

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Fabien SK
Guest





PostPosted: Fri Sep 12, 2003 10:03 am    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote



Geoffroy Baud wrote:

Quote:
Bonjour,

j ai une liste qui contient des pointeur sur une struct
dans ma struct j ai un champ de type int
et je voudrais pouvoir faire un find sur ce int pour
voir s'il corespond ou pas a ma recherche ... ?

Pas "find" mais "find_if"

// ta structure
struct Toto
{
Toto(int val):m_Val(val), m_Val2(val*2){}

int m_Val;
int m_Val2;
};

// une structure prédicat qui compare le nombre
// cherché avec un "Toto*". Se comporte comme une fonction
struct is_equal
{
is_equal(int searched):m_Searched(searched){}
bool operator()(Toto *ptoto){ return ptoto->m_Val==m_Searched; }

int m_Searched;
};

int main(int argc, char *argv[])
{
typedef std::list<Toto*> TotoList;
TotoList lst;
lst.push_back(new Toto(1));
lst.push_back(new Toto(2));
lst.push_back(new Toto(3));

TotoList::iterator it = std::find_if(lst.begin(), lst.end(),
is_equal(2));
if (it!=lst.end())
std::cout << (*it)->m_Val2 << std::endl;


return 0;
}






Quote:

es-ce possible ?
si oui avez vous un lien sur une doc ?
si non avez vous un lien sur une doc qui pourrais m expliquer
comment faire ?
merci ...

j ai bien essayer de chercher dans Primer C++ de lipmann ...
mais je dois reconnaitre que je n ai rien compris :(

merci



Back to top
Geoffroy Baud
Guest





PostPosted: Fri Sep 12, 2003 10:08 am    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote



Fabien SK wrote:

Quote:
Geoffroy Baud wrote:

Bonjour,

j ai une liste qui contient des pointeur sur une struct
dans ma struct j ai un champ de type int
et je voudrais pouvoir faire un find sur ce int pour
voir s'il corespond ou pas a ma recherche ... ?

Pas "find" mais "find_if"

// ta structure
struct Toto
{
Toto(int val):m_Val(val), m_Val2(val*2){}

int m_Val;
int m_Val2;
};

// une structure prédicat qui compare le nombre
// cherché avec un "Toto*". Se comporte comme une fonction
struct is_equal
{
is_equal(int searched):m_Searched(searched){}
bool operator()(Toto *ptoto){ return ptoto->m_Val==m_Searched; }

int m_Searched;
};

int main(int argc, char *argv[])
{
typedef std::list<Toto*> TotoList;
TotoList lst;
lst.push_back(new Toto(1));
lst.push_back(new Toto(2));
lst.push_back(new Toto(3));

TotoList::iterator it = std::find_if(lst.begin(), lst.end(),
is_equal(2));
if (it!=lst.end())
std::cout << (*it)->m_Val2 << std::endl;


return 0;
}







es-ce possible ?
si oui avez vous un lien sur une doc ?
si non avez vous un lien sur une doc qui pourrais m expliquer
comment faire ?
merci ...

j ai bien essayer de chercher dans Primer C++ de lipmann ...
mais je dois reconnaitre que je n ai rien compris :(

merci


merci bcp;

--
-------------------------------------------------------------------
Geoffroy Baud [email]geoffroy.baud (AT) wanadoo (DOT) fr[/email]
0AE5 7A1B 527D 3966 8EBE 2EC0 AA79 EB54 7D7D 7CEC
-------------------------------------------------------------------

Back to top
Fabien SK
Guest





PostPosted: Fri Sep 12, 2003 10:34 am    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote



Geoffroy Baud wrote:

Quote:
Fabien SK wrote:
[...]

merci bcp;


Note: tu n'es pas obligé de recopier tout mon message (plus de 50
lignes) pour juste rajouter un "merci". Il y a une FAQ qui dit comment
bien poster, mais je ne connais pas l'URL...


Back to top
Fabien LE LEZ
Guest





PostPosted: Fri Sep 12, 2003 3:35 pm    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote

On Fri, 12 Sep 2003 12:34:36 +0200, Fabien SK <fabsk+news (AT) free (DOT) fr>
wrote:

Quote:
Il y a une FAQ qui dit comment
bien poster, mais je ne connais pas l'URL...

<http://www.giromini.org/usenet-fr/repondre.html>, quand le bon sens
ne suffit pas...



Back to top
Geoffroy Baud
Guest





PostPosted: Fri Sep 12, 2003 4:34 pm    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote

Fabien SK wrote:

Quote:
Geoffroy Baud wrote:

Fabien SK wrote:
[...]

merci bcp;


Note: tu n'es pas obligé de recopier tout mon message (plus de 50
lignes) pour juste rajouter un "merci". Il y a une FAQ qui dit comment
bien poster, mais je ne connais pas l'URL...

oups, je me suis fais une merde ...
desolé.

Et d'ailleur pendant que j'y suis un grand merci
aux personnes qui maintiennent la FAQ.
--
-------------------------------------------------------------------
Geoffroy Baud [email]geoffroy.baud (AT) wanadoo (DOT) fr[/email]
0AE5 7A1B 527D 3966 8EBE 2EC0 AA79 EB54 7D7D 7CEC
-------------------------------------------------------------------

Back to top
Geoffroy Baud
Guest





PostPosted: Mon Sep 15, 2003 6:39 am    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote

Samuel Krempp wrote:


Quote:
ou alors, avec Boost lambda. tu n'as pas besoin de créer une classe pour
chaque nouvelle opération :

#include #include


Bonjour,
je lis souvent des postes qui parle de
Boost lambda, font-elle partie de la norme ?
Sont-elles portables ?
Qu'apportent-elles de plus ?
Merci

--
-------------------------------------------------------------------
Geoffroy Baud [email]geoffroy.baud (AT) wanadoo (DOT) fr[/email]
0AE5 7A1B 527D 3966 8EBE 2EC0 AA79 EB54 7D7D 7CEC
-------------------------------------------------------------------

Back to top
Samuel Krempp
Guest





PostPosted: Mon Sep 15, 2003 8:56 am    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote

le Monday 15 September 2003 08:39, [email]geoffroy.baud (AT) wanadoo (DOT) fr[/email] écrivit :

Quote:
Samuel Krempp wrote:


ou alors, avec Boost lambda. tu n'as pas besoin de créer une classe pour
chaque nouvelle opération :

#include #include

Bonjour,
je lis souvent des postes qui parle de
Boost lambda, font-elle partie de la norme ?
Sont-elles portables ?
Qu'apportent-elles de plus ?
Merci

pas de la norme, mais de Boost ([url]www.boost.org)[/url], et je crois que l'auteur de
boost lambda voudrait que la norme intègre le support des expressions
lambda (ça permetterait de dépasser des limitations pour les lambda)

elles sont portables, sur les compilos qui sont assez conformes à la norme
tu peux regarder les échecs de ses tests selon compilateur sur
http://boost.sourceforge.net/regression-logs/

Quant à leur interêt, c'est comme je le disais, ça permet simplement
d'écrire en une ligne un objet fonction grâce à une syntaxe reprenant le
principe des epxressions lambda. Au lieu d'avoir à définir une classe pour
faire le foncteur voulu selon besoin (ou de faire de très longues
expressions à base des foncteurs std et de bind1st, bind2nd, etc..)

c pas le jour et la nuit, mais bon, ça peut être utile si on se met à
utiliser des fonctions génériques prenant une fonction en argument (comme
std::for_each, find_if, accumulate, transform, ou des fonctions perso)

--
Sam

Back to top
Samuel Krempp
Guest





PostPosted: Mon Sep 15, 2003 9:31 am    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote

le Monday 15 September 2003 10:54, [email]kanze (AT) gabi-soft (DOT) fr[/email] écrivit :
Quote:
Dans le cas de Boost lambda, pas grand chose en fait. D'une part, c'est
impressionnant ce qu'ils ont réussi à faire sans l'aide du langage
propre, mais de l'autre, c'est un problème du language, et non de la
bibliothèque, et dans la pratique, il y a toujours une ou deux choses
qu'il te faut mais qui ne marche pas.

le premier inconvénient que j'y ai vu, c'est le nbre de cas particuliers
auxquels on est confronté. par exple l'accès aux membres ne peut pas se
faire par _1.monmembre, et la solution bind(&MaClasse::mommembre, _1)
(ou _1 ->* mommembre ) est incommode lorsque le membre est une fonction
surchargée, auquel cas prendre son adresse nécessite une écriture embêtante
iterator (Maclasse::*pf) () = &Maclasse::begin;
bind(pf, _1, ...

et c'est inévitable sans support du langage (et même avec, ça serait ptet
dur de faire autrement)

C'est vrai qu'il y a des choses qu'on peut pas faire, mais faut vraiment
qque ce soit de chose de compliqué (agir sur les éléments par un container
de containers de containers, par exemple, peut être impossible).
tu as un exemple plus courant en tête ?

--
Sam

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Sep 15, 2003 2:21 pm    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote

Samuel Krempp <krempp (AT) crans (DOT) truc.en.trop.ens-cachan.fr> wrote

Quote:
le Monday 15 September 2003 10:54, [email]kanze (AT) gabi-soft (DOT) fr[/email] écrivit :
Dans le cas de Boost lambda, pas grand chose en fait. D'une part,
c'est impressionnant ce qu'ils ont réussi à faire sans l'aide du
langage propre, mais de l'autre, c'est un problème du language, et
non de la bibliothèque, et dans la pratique, il y a toujours une ou
deux choses qu'il te faut mais qui ne marche pas.

le premier inconvénient que j'y ai vu, c'est le nbre de cas
particuliers auxquels on est confronté. par exple l'accès aux membres
ne peut pas se faire par _1.monmembre, et la solution
bind(&MaClasse::mommembre, _1) (ou _1 ->* mommembre ) est incommode
lorsque le membre est une fonction surchargée, auquel cas prendre son
adresse nécessite une écriture embêtante iterator (Maclasse::*pf) () =
&Maclasse::begin; bind(pf, _1, ...

et c'est inévitable sans support du langage (et même avec, ça serait
ptet dur de faire autrement)

Et c'est surtout ça que j'ai voulu dire. C'est un problème langage.

Quote:
C'est vrai qu'il y a des choses qu'on peut pas faire, mais faut
vraiment qque ce soit de chose de compliqué (agir sur les éléments par
un container de containers de containers, par exemple, peut être
impossible). tu as un exemple plus courant en tête ?

Pas vraiment. Il faut dire que je l'ai essayé une ou deux fois, sur des
petits exemples que moi, j'ai considéré simple, et chaque fois, je me
suis heurté à une limitation. D'après ce dont je me souviens, il y avait
des solutions, dans chaque cas (l'utilisation de bind, etc.). Mais en
fin de compte, quand la moitié de l'expression n'est là que pour
contourner les faiblesses de l'outil, on se pose la question.

En revanche, le problème que tu cites me semble grave. Je ne crois pas
qu'il s'est présenté dans mes petits essais, mais dans mes applications,
l'appel à des fonctions membre d'un paramètre arrive souvent.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Back to top
Gabriel Dos Reis
Guest





PostPosted: Mon Sep 15, 2003 2:33 pm    Post subject: Re: problèmes avec algo generique ( find (); ) Reply with quote

Samuel Krempp <krempp (AT) crans (DOT) truc.en.trop.ens-cachan.fr> writes:

Quote:
le premier inconvénient que j'y ai vu, c'est le nbre de cas particuliers
auxquels on est confronté. par exple l'accès aux membres ne peut pas se
faire par _1.monmembre, et la solution bind(&MaClasse::mommembre, _1)
(ou _1 ->* mommembre ) est incommode lorsque le membre est une fonction
surchargée, auquel cas prendre son adresse nécessite une écriture embêtante
iterator (Maclasse::*pf) () = &Maclasse::begin;
bind(pf, _1, ...

nous sommes un certain nombre ,A`(B explorer des choses comme

find_if(lst.begin(), lst.end(), fun (auto x) -> x.m_val == 2);

ou

find_if(lst.begin(), lst.end(), auto (auto x) -> x.m_val == 2);

-- Gaby

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.