Bonjour,
SVP, expliquez-moi cette déclaration:
const char* chain[] = {"aus","qrt","2rtat"};
std::vector<std::string> vecChain(chain,chain+3);
Merci
Bonjour,
SVP, expliquez-moi cette déclaration:
const char* chain[] = {"aus","qrt","2rtat"};
std::vector<std::string> vecChain(chain,chain+3);
Merci
Hello,
C'est équivalent à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 std::vector<std::string> vecChain {"aus","qrt","2rtat"}; // Avec MSVC, initializer_list + std::string provoque systématiquement une "erreur interne au compilateur", // mais c'est du C++ valide et fonctionne correctement sur GCC / clang. // ou std::vector<std::string> vecChain, vecChain.emplace_back("aus"); vecChain.emplace_back("qrt"); vecChain.emplace_back("2rtat"); // ou, version qui ressemble plus à du C char const* str0 = "aus"; char str1[] = "qrt"; // syntaxe différente, mais équivalente char const* str2 = "2rtat"; char const* vec[] = {str0, str1, str2}; // vec est un tableau de pointeurs std::vector<std::string> vecChain; vecChain.emplace_back(vec[0]); // création et ajout de std::string au std::vector vecChain.emplace_back(vec[1]); vecChain.emplace_back(vec[2]);
C'est à dire qu'il utilise le constructeur de vector prenant deux éléments de même type (considéré comme des itérateurs).
chain est un tableau de pointeurs de caractères. C'est à dire, en l'occurence, un tableau de chaines à la C
Dans cette expression, chain est converti implicitement en pointeur vers le premier élément du tableau.
de même, chain+3 est un pointeur "juste après la fin" ("past the end") du même tableau.
Du coup, le constructeur va initialiser le vecteur non pas avec une capacité arbitraire (10, je crois) et aucun élément, mais avec les éléments compris entre chain inclus et chain+3 exclu.
Un peu comme si tu avais pu écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::array<const char*, 3> chain = {"aus","qrt","2rtat"}; std::vector<std::string> vecChain(chain.begin(),chain.end());
Bonjour,
Je vous remercie d'avoir pris le temps de me répondre.
Cordialement,
Seco102
Partager