OVH Cloud OVH Cloud

std::accumulate avec une string

3 réponses
Avatar
Aurélien REGAT-BARREL
Bonjour,
J'ai un tableau de string :
vector<string> str_list;
str_list.push_back( "mot1" );
str_list.push_back( "mot2" );
str_list.push_back( "mot3" );

Je souhaite concaténer chaque mot en une seule string. J'ai utilisé
std::copy sur un ostringstream via un ostream_iterator et ça marche. Mais
avant j'ai essayé d'utiliser std::accumulate directement sur une string. Je
sais que c'est pas trop fait pour, mais je comprend pas pourquoi ça marche
pas (la string au final est vide) :
string s;
accumulate(
str_list.begin(),
str_list.end(),
s );
cout << s << '\n';
Pourquoi ça échoue ?
Merci pour votre aide.

--
Aurélien REGAT-BARREL

3 réponses

Avatar
Fabien LE LEZ
On Tue, 14 Sep 2004 14:32:35 +0200, "Aurélien REGAT-BARREL"
:

string s;
accumulate(
str_list.begin(),
str_list.end(),
s );
cout << s << 'n';
Pourquoi ça échoue ?


Ben... accumulate prend comme troisième argument un T (ici, un
std::string). Pas une référence.

Ceci fonctionne :

string chaine_vide;
cout << accumulate(
str_list.begin(),
str_list.end(),
chaine_vide )
<< 'n';


--
;-)

Avatar
kanze
"Aurélien REGAT-BARREL" wrote in
message news:<4146e394$0$15560$...

J'ai un tableau de string :
vector<string> str_list;
str_list.push_back( "mot1" );
str_list.push_back( "mot2" );
str_list.push_back( "mot3" );

Je souhaite concaténer chaque mot en une seule string. J'ai utilisé
std::copy sur un ostringstream via un ostream_iterator et ça
marche. Mais avant j'ai essayé d'utiliser std::accumulate directement
sur une string. Je sais que c'est pas trop fait pour,


Pourquoi pas ? Ça me semble une utilisation tout à fait normale
d'accumulate.

mais je comprend
pas pourquoi ça marche pas (la string au final est vide) :

string s;
accumulate(
str_list.begin(),
str_list.end(),
s );
cout << s << 'n';
Pourquoi ça échoue ?


L'accumulateur, dans accumulate, c'est dans la fonction. Le troisième
paramètre n'est que sa valeur initiale (mais surtout, il sert à définir
le type de l'accumulateur). La fonction renvoie le résultat comme valeur
de retour. Ce que tu veux, c'est donc :

string s( accumulate( str_list.begin(),
str_list.end(),
string() ) ) ;

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
Aurélien REGAT-BARREL
Ok c'était logique en fait.
Merci à vous deux.

--
Aurélien REGAT-BARREL