J'essaie de faire ce qui suit:
QList<QString> a;
foreach(QString& s, a)
{
s += "s";
}
5 Réponses :
Je crois que le Foraach de Qt adopte une copie temporaire de la collection originale avant de l'itération, il n'aurait donc aucun sens d'avoir une référence non constituée comme modification de la copie temporaire qu'elle n'aurait aucun effet. P>
Comme expliqué sur le Documentation de conteneurs génériques QT :
QT prend automatiquement une copie du conteneur lorsqu'elle entre dans une boucle foreach. Si vous modifiez le conteneur pendant que vous êtes itération, cela n'affectera pas la boucle. (Si vous ne modifiez pas le conteneur, la copie a toujours lieu, mais grâce à la copie implicite de copier un conteneur est très rapide.) De même, déclarant que la variable est une référence non constituée, afin de modifier l'élément actuel dans La liste ne fonctionnera pas non plus. P> blockQuote>
Il en fait une copie, car vous voudrez peut-être supprimer un élément de la liste ou ajouter des éléments pendant que vous bouclez par exemple. L'inconvénient est que votre cas d'utilisation ne fonctionnera pas. Vous devrez goûter sur la liste à la place: P>
for (QList<QString>::iterator i = a.begin(); i != a.end(); ++i) {
(*i) += "s";
}
Nitpick mineur: Je préfère: pour (qlist
Peut-être pour votre cas:
namespace bl = boost::lambda; std::for_each(a.begin(),a.end(),bl::_1 += "s");
ou vous pouvez utiliser
QList<QString> a;
BOOST_FOREACH(QString& s, a)
{
s += "s";
}
avec C ++ 11, qt encourage maintenant cette standard pour la syntaxe code> au lieu de qt foreach em>: