Je suis en train d'apprendre le C++/la programmation générale et j'expérimente parfois les fonctionnalités du C++11 tout en faisant des exercices écrits pour l'ancienne norme.
Cet exercice fait intervenir un vecteur de pointeurs sur des chaînes de caractères.
#include <vector>
#include <string>
#include <iostream>
int main()
{
using std::string ;
using std::vector ;
using std::cout ;
using std::endl ;
vector<string *> v = {new string("Hello") , new string("World")} ;
for (string * x : v) {
cout << *x << " " ;
delete x ;
}
cout << endl ;
}
J'ai eu un peu de mal à comprendre comment utiliser la liste d'initialisation avec ce vecteur, mais cela semble fonctionner.
Cette version fonctionne également :
//...
string s1 = "Hello" ;
string s2 = "World" ;
vector<string *> v = {&s1 , &s2} ;
for (string * x : v)
cout << *x << " " ;
//...
C'est plus propre, et d'après ce que j'ai appris jusqu'à présent, cela semble être la meilleure solution.
Mais je me demande s'il existe un autre moyen d'initialiser le vecteur sans créer les chaînes de caractères à l'avance ou sans avoir à les supprimer. Ce que j'ai lu suggère que la liste {} devrait être utilisable universellement.
Et pour ce que ça vaut, cela donne une erreur plutôt catastrophique :
vector<string *> v = {"Hello" , "World"} ;