77 votes

Boucle Foreach en C++ équivalent de C#

Comment convertir ce code en C++ ?

string[] strarr = {"ram","mohan","sita"};    
foreach(string str in strarr) {
  listbox.items.add(str);
}

123voto

missingfaktor Points 44003

à base de rangs pour :

std::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
for(const std::string& str : strarr) {
  listbox.items.add(str);
}

pré c++11

std::string strarr[] = {"ram", "mohan", "sita"};
for(int i = 0; i < 3; ++i) {
  listbox.items.add(strarr[i]);
}

ou

std::string strarr[] = {"ram", "mohan", "sita"};
std::vector<std::string> strvec(strarr, strarr + 3);
std::vector<std::string>::iterator itr = strvec.begin();
while(itr != strvec.end()) {
  listbox.items.add(*itr);
  ++itr;
}

Utilisation de Boost :

boost::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
BOOST_FOREACH(std::string & str, strarr) {
  listbox.items.add(str);
}

3 votes

@ronag : La réponse acceptée aquí reflète mon opinion sur std::for_each .

2 votes

Qu'en est-il de la taille du tableau comme for(int i = 0; i < sizeof(strarr)/sizeof(strarr[0]); i++) dans le premier exemple de code ?

0 votes

Puisque C++11 a 6 ans et 3 normes de retard, puis-je suggérer de déplacer la partie C++11 de la question vers le haut. En fait, supposons que C++11 est la norme par défaut et ne mentionnons pas C++. Au lieu de cela, mentionnez C++98 pour l'autre.

29voto

Artyom Points 17387

En C++0x, vous avez

for(string str: strarr) { ... }

Mais en attendant, utilisez une boucle for ordinaire.

5voto

Snowman Points 1199

Boost a une macro qui le fait pour vous.

http://www.boost.org/doc/libs/1_44_0/doc/html/foreach.html

0 votes

Je sais que Google est nul à cet égard, donc ce n'est pas votre faute, mais la dernière version est la 1.44, donc le lien devrait contenir 1_44, pas 1_35. (Vous devrez corriger les résultats de Google à la main).

0 votes

Merci. J'ai téléchargé et construit la version 1.44 sur mon système, mais je ne pensais pas à la version lorsque j'ai posté ce message.

5voto

Claptrap Points 21299

Juste pour le plaisir (nouvelles fonctions lambda) :

      static std::list<string> some_list;

      vector<string> s; 
      s.push_back("a");
      s.push_back("b");
      s.push_back("c");

      for_each( s.begin(), s.end(), [=](string str) 
        {
          some_list.push_back(str);
        }

  );

  for_each( some_list.begin(), some_list.end(), [](string ss) { cout << ss; } );

Bien qu'il soit recommandé de faire une simple boucle :-)

0voto

EMP Points 17246

Si vous disposez d'un tableau, vous pouvez simplement utiliser une balise for boucle. (Je suis désolé, mais je ne vais pas taper le code pour une for boucle pour vous).

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