Vecteur de Structures
J'ai un code m'a été donné par une autre personne en qui nous avons une structure
struct Pair {
string s1;
string s2;
bool equivalent;
};
Puis il met en place un vecteur de ces structures ont été codés en dur
std::vector<Pair> PairID;
staticdata() {
PairID={{"string","string2",true},
{"string","string3",true},
{"string","string4",false},
{"string","string7",false},
{"string3","string8",false}
};
}
Malheureusement, mon compilateur se plaint sur la ligne PairID={{"chaîne","chaîne2",true},
Pourquoi est-ce? Il a suggéré de le compiler avec -std=c++0x, mais mon compilateur (gcc 4.2) ne prend pas en charge cette. Est-il un moyen facile de convertir le code de sorte qu'il fonctionne? Pourquoi est-elle défaillante??
Je suis à l'aide de Mac OSX et préfère ne pas mettre à jour mon compilateur
OriginalL'auteur Robert | 2010-11-11
Vous devez vous connecter pour publier un commentaire.
Votre code n'est pas légal C++. Il est juridique C++0x, mais il y a eu beaucoup de changements à la langue. Donc, si vous voulez compiler ce code comme code C++, vous aurez besoin de le changer.
PigBen de la solution est un moyen, le problème avec les données temporaires pourraient être construits & plusieurs fois détruit, ou de vivre longtemps.
Voici une autre façon:
Pour être sûr, je serais probablement utiliser une solution comme PigBen du moins pour quelque raison que ce soit, je ne voulais pas.
Mais je doute sérieusement que l'optimisation de construire PigBen la solution sera vite que cela.
OriginalL'auteur John Dibling
Car il n'est pas valide en C++. Il sera être, dans C++0x. Mais encore, il est tout simplement pas valide. Et puisque votre compilateur ne supporte pas encore le C++0x, vous devrez le faire à la dure, c'est à dire remplir le vecteur un élément à la fois, ou une copie d'un C tableau ...:
(Cela nécessitera la
algorithm
etiterator
des en-têtes standard.)PairId.assign()
est sans doute ce qui nécessitera le moins de travail.est une indication de nice, merci. J'ai toujours utilisé
copy
avec unback_inserter
jusqu'à maintenant.OriginalL'auteur Konrad Rudolph
OriginalL'auteur Benjamin Lindley
Vous pouvez utiliser Boost.Céder, qui est un sucre syntaxique pour la création d'un vecteur et puis l'alimenter:
OriginalL'auteur wilhelmtell
OriginalL'auteur user9186396
Si vous connaissez la taille du vecteur à l'avance, alors vous pouvez aller pour ce
Vous pouvez utiliser n'importe quelle instance temporaire de la structure et d'affecter les valeurs par défaut et ensuite utiliser une attribution normale comme
OriginalL'auteur Onk_r