Lorsque j'utilise ça, il n'y a que la première valeur "proType[0]" qui est initialisée à 9.Code:unsigned int proType[65536]={9};
Je compile avec MinGW
Si quelqu'un pouvait m'expliquer pourquoi ?
Version imprimable
Lorsque j'utilise ça, il n'y a que la première valeur "proType[0]" qui est initialisée à 9.Code:unsigned int proType[65536]={9};
Je compile avec MinGW
Si quelqu'un pouvait m'expliquer pourquoi ?
Bonjour matteli, il s'agit en fait d'une mauvaise utilisation des accolades voila un exemple qui devrait etre plus clair :Si tu veux attribuer une valeurs initiales aux elements de ton tableaux il existe la fonction memset mais si tu dois gerer un tableau je te conseil un vecteur stl pour la gestion dynaimique ou un boost::array pour des tableaux de taille fixe ;)Code:unsigned int Array[4] = {9,9,9,9};
Il faut faire une initialisation pour chaque "case" de ton tableau:
sinon même remarque qu'au dessus, vector, ou boost::array.Code:
1
2
3
4
5 unsigned int proType[65536]; for(int* itr = proType; itr < (proType + 65536); ++i) { *itr = 9; }
Ou bien mieux en C++
ET encore meilleurCode:std::fill(proType,proType+65536,9);
ouCode:std::vector<int> proType(65536,9);
Code:
1
2
3 std::vector<int> proType(65536); std::fill(proType.begin(),proType.end(),9);
Pour ce qui est de vector, je l'utilise déjà pour des tableaux de taille variable.
Pour ce qui est de boost, j'hésite à m'en servir. Peur de pas savoir m'en servir. J'ai vu qu'il fallait compilé une partie de la biblio pour s'en servir, peut être pas pour les array.
Je pense que je vais me contenter de la méthode de Floréal. D'ailleurs, si je comprends le but de cette boucle, je ne comprends pas son fonctionnement.
Si tu peux m'éclairer Floréal.
Merci
Moi aussi j'étais réticent au debut pour me lancer dans boost (il y a de ca a peine plus d'une semaine :king:) mais le tutoriel http://arb.developpez.com/c++/boost/install/vc++/ explique vraiment bien comment installer la librairie si tu utilise visual c++. Et il y a beaucoup de choses a apprendre dans cette librairie
etCode:
1
2
3
4
5 unsigned int proType[65536]; for(int* itr = proType; itr < (proType + 65536); ++i) { *itr = 9; }
Sont équivalent. Il parcoure ton tableau avec les pointeur pour initialiser tes valeur.Code:
1
2 unsigned int proType[65536]; std::fill(proType,proType+65536,9);
Pourquoi ne peut tu pas utiliser un STD::vector ?? j'ai pas compris :aie:
Salut,
Peut etre comprendrais tu mieux le fonctionnement s'il l'avait écrit sous la forme de
:question:Code:
1
2
3
4
5 unsigned int proType[65536]; for(int* i = 0; i < 65536; ++i) { proType[i]=9; }
Simplement, au lieu de passer par l'indice du tableau (ce que je trouve quand même plus facile à lire), il est passé par "le pointeur sur l'élément".
En effet, quand tu déclare unsigned int proType[65536], proType sans rien représente l'adresse de l'élément 0 du tableau, et donc, (proType+65536) correspond à l'adresse de fin de ce tableau.
L'instruction à l'intérieur de la boucle dit tout simplement qu'il faut fournir la valeur 9 "à l'élément qui se trouve à l'adresse" de itr ;)
Ceci dit, et d'un avis strictement personnel, il n'y a strictement aucune raison à n'utiliser les std::vector que pour des tableaux de taille variables, surtout si le tableau de taille fixe est encapsulé dans une classe personnelle.
en effet, avec une classe du genre de
cache tout à fait le fait que tu utilise un std::vector ;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 class LaClass { publc: /* le constructeur qui initialise les éléments du tableau * à 0 par défaut */ LaClass():tab(65536,0){} /* le constructeur qui initialise les élément du tableau * à une valeur fournie par l'utilisateur */ LaClass(int val):tab(65536,val){} ~LaClass(){} /* on ne fournis que deux méthodes pour y accéder */ /* l'operateur [] pour acces en lecture seule */ const int operator[] (size_t index) const { assert (index<65536); return tab[index]; } /* et une méthode permettant de modifier une valeur */ void modify(size_t index, size_t value) { assert (index<65536); tab[index]=value; } private: std::vector<size_t> tab; };
Enfin, et c'est encore mon avis personnel, mais la "peur de ne pas savoir se servir d'une bibliothèque" est sans doute le pire ennemi du programmeur:
En effet, ta "peur" est finalement relativement irraisonnée, vu que tu trouveras facilement de l'aide sur la plupart des bibliothèques, surtout si elles sont aussi généralisée que boost.
Ta peur te mettra dans une situation où tu va décider délibérément de perdre ton temps à faire (sans doute mal) tout seul quelque chose qui a été fait (sûrement mieux) par toute une équipe, au lieu de t'inquiéter de ce qui est vraiment important.
Maintenant, il n'est pas question de t'obliger à quoi que ce soit non plus :D
Qui peut le plus, peut le moins.
Donc je pourrai utiliser vector, seulement je m'étais dit qu'il fallait réserver les vecteurs pour les tableaux dynamique et les tableau C++ pour ceux de taille fixe et défini avant la compil.
C'est sans doute bête. Surtout que les vecteurs sont vraiment très sympa à utiliser.
ok je comprends mieux. C'est le ++i de la boucle qui m'avais dérangé. J'imagine que c'est plutot ++itr.
Pour ce qui est de Boost, je compte bien m'y mettre. Seulement, je fais actuellement mon premier programme en c++ et je viens de VB6, c'est à dire beaucoup de changement pour moi. J'y vais mollo pour l'instant et n'inclu pas tout d'un seul coup.
oui, il fallait lire ++itr... une faute d'attention de la part de Floréal ;)
Tu n'a pas tord, dans le fond "qui va lentement, va surement" :DCitation:
Pour ce qui est de Boost, je compte bien m'y mettre. Seulement, je fais actuellement mon premier programme en c++ et je viens de VB6, c'est à dire beaucoup de changement pour moi. J'y vais mollo pour l'instant et n'inclu pas tout d'un seul coup.
habitue toi bien avec la S(T)L, mais garde en tête le fait que boost est particulièrement bien fourni et efficace ;) (une bonne partie de boost devrait d'ailleurs être inclue dans la prochaine norme ;))