Et alors? tab.push_back(valeur) ça ajoutera la valeur au tableau, quelle qu'elle soit.Citation:
Envoyé par Fred2209
Enfin bon, si tu veux mon avis, n'ecris jamais dans ton code qqch que tu ne comprends pas.
Version imprimable
Et alors? tab.push_back(valeur) ça ajoutera la valeur au tableau, quelle qu'elle soit.Citation:
Envoyé par Fred2209
Enfin bon, si tu veux mon avis, n'ecris jamais dans ton code qqch que tu ne comprends pas.
C'est vrai tu as raison, mais je vais me renseigner là dessus.
Pourquoi un static_cast ici? Le seul contexte où c'est nécessaire c'est quand les surcharges feraient préférer une autre fonction que celle désirée... et alors je pense a priori que surcharger était une mauvaise idée.Citation:
Envoyé par Médinoc
Si tu connais a priori la taille de ton tableau, plutôt que de l'agrandir petit à petit tu peux le définir avec:Citation:
Envoyé par Fred2209
ou tu peux lui donner une nouvelle taille avecCode:std::vector<float> tab(10);
Code:tab.resize(10);
Et justement je ne peux pas connaître la taille de mon tableau à l'avance même jusqu'à la dernière valeur rentrée c'est pour cela que je voudrais l'augmenter au fur et à mesure...
Mais déjà, il faut savoir ce que tu veux faire!
push_back() ajoute la valeur passée en paramètre au tableau.
Donc:
- Si tu veux ajouter 1.5, tu dois simplement faire tab.push_back(1.5);
- Alors que si tu veux ajouter i (qui est un entier), il te faut tab.push_back(static_cast<float>(i));
(même si en fait, avec les promotions automatiques, le static_cast<> est peut-être inutile. Tu peux toujours tester sans et voir si ça compile toujours...).
Ce l'est. En fait, dans les cas où c'est nécessaire, j'écrirais d'ailleurs plutôt float(i).Citation:
Envoyé par Médinoc
Mais en fait si ce petit exemple marche, pour ce que j'ai à faire c'est ce qui me convient le mieux...
Parce qu'au final bien sur que ce n'est pas des valeurs fixes comme 1.5 que je vais mettre dedans...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include<vector> void fct1() { vector<float> tab1; vector<float> tab2; vector<float> tab3; for (int i = 1; i<10; i++) { tab1.push_back(static_cast<float>(i)); tab2.push_back(static_cast<float>(i)); tab3.push_back(static_cast<float>(i)); tab1[i] = 1.5; tab2[i] = 1.5; tab3[i] = 1.5; } }
Mais j'ai testé le function-style cast, c'est aussi brutal que le C-Style cast, donc à bannir aussi.Citation:
Envoyé par Jean-Marc.Bourguet
Fred2209 : Ben non ce n'est pas ce qui convient le mieux, tu fais deux opérations là où une seule suffit...
Tu veux dire parce que d'abord j'augmente la taille du tableau et apres je la remplie au lieu de l'agrandir et de la remplir en même temps..
mais est ce que l'indice du tableau (ici c'est "i") va s'incrémenter de un en un si je fais directement un push.back ?
J'aime pas mettre une syntaxe lourde pour quelque chose d'innocent.Citation:
Envoyé par Médinoc
1- ouiCitation:
Envoyé par Fred2209
2- littéralement push_back, c'est empiler_à-la-fin. Tu n'as même plus besoin d'un indice. Le dernier élement, ben ... c'est le dernier. Autantempiler directement l'élément final plutôt que d'empiler une valeur bateau que tu va remplacer aussitôt.
ok j'ai compris mais alors que fait l'instruction "static_cast" ?
Quiquonque fait du C++ devrait le savoir: Ici, ça convertit un int en float.
Convertion explicite.
Sans le moindre intérêt pour passer de int à float -- le contraire n'est pas vrai.
Je vois deux cas où il y a un intérêt:Citation:
Envoyé par Luc Hermitte
- pour choisir la bonne surcharge (et sauf si c'est pour éviter une instantiation de template, je m'interrogerais sur la présence de surcharge)
- pour passer l'argument correct à une fonction variadique.
Aucun des deux cas ne doit être très courant.
Dans ce cas-là un implicit_cast est peut-être plus approprié.
Et si je le redimensionne au fur et à mesure avec le fonction "tab.resize(x)" comme ceci est-ce que je garde toutes les valeurs précedemment rentrées ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include <vector> void main() { std::vector<float> tab; for (int i=1;i<10,i++) { tab.resize(i); tab[i] = 1.5; } }
Oui. Mais je n'ai toujours pas compris pourquoiCitation:
Envoyé par Fred2209
ne convient pas.Code:
1
2
3
4 for (int i=1;i<10,i++) { tab.push_back(1.5); }
Fais plutôt le resize une fois pour toutes, ou utilise le constructeur de vectorCitation:
Et si je le redimensionne au fur et à mesure avec le fonction "tab.resize(x)" comme ceci est-ce que je garde toutes les valeurs précedemment rentrées ?