intialisation d'un Vector

intialisation d'un Vector - C++ - Programmation

Marsh Posté le 16-11-2013 à 21:50:54    

Bonsoir,
 
Chaque fois je veux initialiser un vecteur,le compilateur m'indique une erreur: [i]error expected primary-expression before '{' token[/i] .
 moi j'arrive pas à comprendre où il est le problème !  :??:  
 

Code :
  1. #include <iostream>
  2. #include<string>
  3. #include<vector>
  4. using namespace std;
  5. char code(char cara,int x){
  6. std::vector<char>caracter({'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','y','z'});
  7. //.....


 
quelqu'un peut m'aider SVP!?
 
Merci d'avance;

Message cité 1 fois
Message édité par skn le 16-11-2013 à 21:54:36
Reply

Marsh Posté le 16-11-2013 à 21:50:54   

Reply

Marsh Posté le 16-11-2013 à 23:12:02    

Regarde du côté de std::initializer_list (possible que ça soit C++11 only) pour l'initialisation avec les brackets. :jap:
 
Sinon, faut que tu procèdes comme ça :  
 

Code :
  1. std::vector<char> Character(26);
  2.    for (int i=0;i<26;++i)
  3.       Character[i] = 'a' + i;


 
Les caractères sont simplement un entier sur un seul octet, c'est lors de l'affichage que ça sera interprété et affiché comme une lettre.
L'alphabet est contigu :
a = 97
b = 98
etc etc.
 
Ceci-dit, je vois mal l'utilité (bon, je connais pas le reste de la fonction :D) de stocker les lettres dans un vector.
Si tu veux t'en servir comme un tableau, tu peux faire ça :  
 

Code :
  1. char Lettre(int index)
  2. { return 'a' + index; }
  3. // Lettre(0) -> a
  4. // Lettre(1) -> b
  5. // etc..


 
:jap:


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 17-11-2013 à 00:17:37    

skn a écrit :

moi j'arrive pas à comprendre où il est le problème !  :??:


Le problème, c'est que tu n'a pas été lire la doc de std::vector et voir quel constructeurs sont possibles. Si tu lis cette doc ici ou la, tu constateras qu'aucun constructeur n'admet ce que tu veux passer comme paramètre.
 
 

Terminapor a écrit :

Regarde du côté de std::initializer_list (possible que ça soit C++11 only) pour l'initialisation avec les brackets. :jap:

En utilisant l'aggregate initialization de C++11 on peut faire:
std::vector<char> caracter {{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','y','z'}};
 
(ça doit revenir a faire std::vector<char> caracter(std::initializer_list<char>({'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','y','z'})); mais avec une écriture un peu moins lourde).
 
Un petit exemple pour tester:

Code :
  1. #include <iostream>
  2. #include <vector>
  3. template<typename T>
  4. std::ostream& operator<<(std::ostream& s, const std::vector<T>& v) {
  5.     s.put('[');
  6.     char comma[3] = {'\0', ' ', '\0'};
  7.     for (const auto& e : v) {
  8.         s << comma << e;
  9.         comma[0] = ',';
  10.     }
  11.     return s << ']';
  12. }
  13. int main()
  14. {
  15.     std::vector<char> caracter {{'a','b','c','d'}};
  16.     std::cout << "caracter: " << caracter << '\n';
  17.     return 0;
  18. }


 

C:\clang>g++ -std=c++11 -o vectest.exe vectest.cpp
 
C:\clang>vectest
caracter: [a, b, c, d]


 
Mais bon, ça n'a aucun intérêt d'utiliser std::vector ici: pour qque chose comme l'alphabet, qui est de taille invariable, il y a std::array.
std::array<char, 26> caracter {{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','y','z'}};
 
A+,


Message édité par gilou le 17-11-2013 à 00:33:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed