dans la premiere méthode, il semblerait que la boucle for plante le programme, faut il faire un simple push back pour assurer le coup ? peut etre que le vector est vide et il y a des problèmes d'allocations mémoire ? (je suis novice je sais)
dans la premiere méthode, il semblerait que la boucle for plante le programme, faut il faire un simple push back pour assurer le coup ? peut etre que le vector est vide et il y a des problèmes d'allocations mémoire ? (je suis novice je sais)
Pareil pour ton paramètre et1, passe le par référence constante:
[Edit: cross-post]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 std::vector<int> *recup_mc(const std::bitset<8u> &et1) { std::vector<int> *mc = new std::vector<int>; for (int i = 0; i <= 3; i++) mc->pushback(et1[i]); return(mc);}
ca édite ca édite :p :p
c bon ca marche bien, ceci dit, après comment puis je accéder simplement aux valeurs du vector ? exemple pour un tableau de char :
tab[3] me permet d'accéder au troisieme élément.
et pour un vecteur, je dois jongler avec front et back ?
Non. Tu as deux solutions.Envoyé par Thordax
1. Soit tu utilises les iterateurs
2. Soit tu utilises la méthode at(position) ou l'opérateur []
C'est égal.
merci pour toutes vos réponses si rapides de surcroit !![]()
Un problème résolu en amenant un autre, j'ai à nouveau une question :
Je cherche à convertir en hexa (pour affichage et stockage dans un fichier) le contenu d'un buffer entier, et obtenir quelque chose dans mno fichier du genre :
"Trame n.1
Sous-trame n.1 : (contenu du buffer de la sous trame)"
Je n'ai pas de problème de boucle particulier, par contre, le passage en hexa me pose toujours autant problème ... Mon bout de code est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 //PASSAGE DE STRING A HEXA POUR AFFICHAGE size_t size = contenu.size() + 1; char * tampon = new char[ size ]; strncpy( tampon, contenu.c_str(), size ); unsigned long *hexa_tampon; file << "PDU n." << dec << num_PDU << " : "; for (int i=0 ; i<= size ; i++){ std::bitset<8> bin_tampon( tampon[i] ); hexa_tampon[i] << bin_tampon[i]; } delete [] tampon; file << endl;
Hum ... Le genre de trucs que je n'aime vraiment pas. Si il est prouvé qu'il y a besoin de perfs à cet endroit là, il y a le passage par référence, les auto_ptr<>, ou des trucs comme adobe::copy_on_write qui donnent un semblant de sémantique de déplacement en attendant les lvalue références (si jamais elles sont acceptées).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 std::vector<int> *recup_mc(std::bitset<8u> et1) { std::vector<int> *mc = new std::vector<int>; for (int i = 0; i <= 3; i++) mc->pushback(et1[i]); return(mc);}
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Effectivement c'est un peu gorre... c'était pour rester dans le même schéma de protoype de fonction qu'il voulait au départ, personnellement j'aurais plutôt rajouté un paramètre référence sur le vecteur à remplir et rien retourné du tout![]()
La façon correcte de faire ceci estEnvoyé par b4u
C'est au compilateur d'être suffisamment malin pour ne pas faire de copies inutiles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 std::vector<int> recup_mc(const std::bitset<8u> &et1) { std::vector<int> mc(4); for(std::vector<int>size_type i = 0; i <= 3; i++) mc.push_back(et1[i]); return mc; }
Ça c'est plutôt ce qu'on fait en C.personnellement j'aurais plutôt rajouté un paramètre référence sur le vecteur à remplir
Partager