problème avec for_each - C++ - Programmation
Marsh Posté le 05-08-2004 à 15:38:57
moi je dirais qu'il apprécie pas trop la copie de stream (mais j'ai pas testé, j'ai pas de compilo c++ au boulot)
cela dit moi j'aurais plutot fait avec un std::copy + iterator perso
Marsh Posté le 05-08-2004 à 16:18:41
c'était effectivement la copie de stream qu'il n'aimait pas.
j'y suis arrivé comme ca :
Code :
|
j'ai essayé avec tranform, mais je n'y suis pas arrivé :
je ne vois pas comment remplir un std::string (ou std::ostreamstring ou autre)
à partir d'un std::list<std::string>
aurais-tu un petit exemple stp ?
Marsh Posté le 05-08-2004 à 16:38:41
ben un stingstream, c'est un stream, tu peux très bien faire
* istream_iterator<string>(in)++ = "hello";
Marsh Posté le 06-08-2004 à 17:27:21
Hormis le pb de compilation, il me semble que ton functor etait mal conçu. La valeur de oss appartenant à l'instance fs n'est pas modifiée par le for_each. Je me trompe ?
Code :
|
Marsh Posté le 06-08-2004 à 17:43:55
la méthode que j'ai mise ci-dessus fonctionne (edit : a l'exécution aussi), en effet l'objet ostringstream est passé par référence.
au niveau de l'optimisation, il veut mieux remplir un std::ostringstream ou un std::string pour des concaténations comme ca ?
Marsh Posté le 06-08-2004 à 17:51:48
J'ai préféré le string parce qu'aucune conversion n'etait nécessaire dans ton cas d'utilisation (juste concaténation). Niveau optimisation, je ne sais pas dire exactement.... je pencherais pour string plus rapide que ostringstream ! En attendant Taz, tu paries sur quoi ?
Marsh Posté le 06-08-2004 à 17:56:47
ben t'as pas besoin d'un ostringstream pour concaténer des string. ni même de foreach
Marsh Posté le 06-08-2004 à 17:57:14
je suppose que le std::string ralloue son buffer a chaque concaténation, ce qui n'est peut-être pas le cas d'un buffer de stream ... donc je voterais ostringstream plus rapide
Marsh Posté le 06-08-2004 à 18:25:52
Un gage, un gage, un gage !
Marsh Posté le 09-08-2004 à 11:03:48
Et pourquoi pas une simple petite fonction templatee qui utilise un ostream_iterator :
Code :
|
Marsh Posté le 09-08-2004 à 20:12:11
ah voui en effet mci pour cette solution
xterminate => jdois courir en slip a travers le forum ?
Marsh Posté le 09-08-2004 à 20:20:57
HelloWorld > solution séduisante !
BlackGoddess > En cette période estivale, le string est de rigueur !
Marsh Posté le 05-08-2004 à 15:19:33
Bonjour, j'ai une erreur avec le code suivant :
compilé avec visual studio 2003
a cette ligne : std::for_each(l.rbegin(), l.rend(), fs);
error C2664: 'std::for_each' : impossible de convertir le paramètre 3 de 'black::stack_trace::format_stack' en
'black::stack_trace::format_stack'
Je suppose que c'est un problème de prototype de l'opérateur () du foncteur, mais je n'arrive pas à trouver ...
Toute aide est bienvenue, merci
Message édité par blackgoddess le 05-08-2004 à 15:20:01
---------------
-( BlackGoddess )-