2017-02-13 1 views
0

Je veux créer un objet dans un fichier std :: vector en évitant de le créer, puis l'appeler push_back(). J'ai entendu parler emplace_back() mais je ne pouvais pas l'utiliser dans cette situation: Créer un objet à l'intérieur d'un vecteur qui est contenu par un autre

std::vector<std::vector<std::string>> info; 

Ensuite, quelqu'un sait comment créer l'info chaîne dans le second vecteur et ce vecteur dans la dernière position du premier ? Quelque chose de semblable à cela, mais sans utiliser Info2 et push_back():

std::vector<std::string> info2; 
info2.emplace_back("a"); 
info.push_back(info2); 
+3

Je vous recommande d'éviter ces "vecteurs bidimensionnels" et votre problème disparaîtra. Gardez un 'std :: map >' (si votre dimension interne n'est pas fixe) ou gardez un 'std :: vector ' et disposez une traduction coordonnée autour (si votre dimension intérieure c'est réglé). Ensuite, vous n'avez pas de création d'objet inutile, ce qui est exactement le problème que vous rencontrez ici! –

Répondre

1

Vous pouvez emplace_back un vecteur entier, comme celui-ci

info.emplace_back(std::vector<string>{"a"}); 

Cependant le traitement avec le vecteur de vecteurs est lourd de sorte que vous pouvez Repensez votre design, comme suggéré par Lightness Races in Orbit.