2 votes

for_each pour concaténer une chaîne, à toutes les chaînes dans un vecteur

Je suis en train d'apprendre le c++, donc naturellement je me suis amusé à essayer de comprendre ce que je peux et ne peux pas faire. J'ai écrit un petit bout de code pour jouer avec les lambdas et les chaînes de caractères, mais il semble me poser quelques problèmes :S.

J'ai deux chaînes stockées dans le vecteur, l'une est au chocolat et l'autre à la vanille. Je veux concaténer "fudge" à la fin. Je déclare les bibliothèques associées. Tout se compile et s'exécute. Mais rien ne concatène :S Toute aide serait appréciée. Merci d'avance.

void main()
{

     vector<string> ramzy;
     ramzy.push_back("chocolate");
     ramzy.push_back("vanilla");

     for_each(ramzy.begin(),ramzy.end(),
         [](string word)->string{
             string i = word + " fudge";
             return (i);
         } );

     cout << ramzy[0] << endl << ramzy[1] << endl;

}

La sortie est montrée ci-dessous :

chocolate
vanilla

La sortie souhaitée est indiquée ci-dessous :

Chocolate Fudge
Vanilla Fudge

7voto

soon Points 12000

En référence :

std::for_each

Applique l'objet fonction donné f au résultat du déréférencement chaque itérateur dans l'intervalle [first, last) dans l'ordre. Si InputIt est un itérateur mutable, f peut modifier les éléments de la plage par l'intermédiaire de l'itérateur itérateur déréférencé . Si f renvoie un résultat, le résultat est ignoré. .

Donc, vous devez changer votre lambda en :

[](string& word)
{
    word += " fudge";
}

5voto

Jagannath Points 2326

Au lieu de for_each, utilisez transform pour votre besoin.

std::transform(ramzy.begin(),ramzy.end(),ramzy.begin(),[](const std::string& str) 
          { 
                return str + " fudge"; 
           });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X