bonjour ;
je suis débutant en c++, en java pour parcourir et pour savoir le nombre de cases d'un tableau j'utilise lenght .
en c++ il y'a sizeof(tab) , mais elle rend la taille en octet et pas en nombre de case .
Merci par avance
bonjour ;
je suis débutant en c++, en java pour parcourir et pour savoir le nombre de cases d'un tableau j'utilise lenght .
en c++ il y'a sizeof(tab) , mais elle rend la taille en octet et pas en nombre de case .
Merci par avance
Bonjour
En C++, c'est size : http://www.cplusplus.com/reference/vector/vector/size/
Depuis C++11, on peut faire ceci :
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
22
23
24
25
26
27
28
29
30
31
32 // g++ -Wall -Wextra -Wconversion -std=c++11 -pedantic -O3 -march=native -fopenmp main.cpp -o main && ./main #include <iostream> #include <vector> int main() { std::vector<int> v({0, 1, 2, 3, 4, 5, 6}); // Parcours "à l'ancienne" for (std::size_t i = 0; i < v.size(); ++i) { std::cout << v[i] << std::endl; } std::cout << std::endl; // Parcours C++11 (range based iterator) for (auto /*const &*/ e : v) { std::cout << e << std::endl; } std::cout << std::endl; // Parcours avec les itérateurs for (auto it = v.begin(); it != v.end(); ++it) { std::cout << *it << std::endl; } std::cout << std::endl; return 0; }
Une remarque cependant,
size fonctionne avec les conteneurs stl par exemple vector.
Si tu utilise un tableau
tab contiens l'adresse du premier élément mais pas (à ma connaissance) d'informations sur la taille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int Entries = 42 int* tab = new int[Entries] // Tu accèdes aux contenu de tab via tab[index]
C'est à toi de te débrouiller pour avoir l'information sous la main (par exemple en passant la taille du tableau comme argument à la fonction qui l'utilise ou en encapsulant ton tableau dans une structure/classe).
Une excellent raison pour préferer les vecteurs lorsque tu n'as pas de contraintes de performance/mémoire.
Une remarque aussi, C++11 n'est pas encore implémenté dans tous les compilo donc pour l'instant attention.
Ouais mais typiquement gérer des tableaux a la main avec new, ça fait partie des choses qu'il ne faut pas faire.
Il faut toujours préférer les std::vector à un tableau alloue avec new, quitte à utiliser un allocateur spécifique dans les cas qui le demandent.
Tu as une gestion automatique de la mémoire et ca, ca n'a pas de prix !
Et sinon le C++11 est supporté par tous les compilateurs standards "mainstream".
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
j'ai essayé cela
mais j'ai une erreur avec tab.size() ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int tab [4]; tab[0]=12; tab[1]= 42; tab[2]= 72; cout<<"la taille du tab" << tab.size() << endl;
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 vector<int> tab(4); tab[0]=12; tab[1]= 42; tab[2]= 72; cout<<"la taille du tab" << tab.size() << endl;
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager