Les tableaux

:stuck_out_tongue:
Je vais vous poser une colle qui à déjà était posé par Taz sur un autre forum :
Le but est de retourner la taille d’un tableau le tout en vrai C++ pas en C/C++

La réponse tiens en 3 lignes.

Ca serais cool qu’il n’y ait que des réponses sérieuses et ceux qui ont trouvé la soluce sur le net qu’il la garde pour eux peut être que certain on envies de chercher par eux même.

enjoy.

on a le droit d’utiliser des librairies ?

ça fait 2 ans que g pas fait de c++

[:______] [cpp]

int toto::longTab(int tab[])
{
int res=0,i=0;
while(tab[i]!=’\0’){i++;res++;}
return res;
}
[/cpp]

bon g un peu tricher pour la boucle :smiley:

pas de bibliothèque.
euh teste ta fonction avec :
int tab[]={1,2,3};
et tu m’explique ou il est ‘\0’ :wink:

Faudrait en dire plus, je vois pas trop ce qu’il faut faire…

[cpp]
int main()
{
int tab[15];
std::cout << appel_a_ta_fonction_qui_retourne_la_taille_de_tab;
}
[/cpp]

le tout en vrai C++

Bin la taille de tab, c’est 15… :stuck_out_tongue:

Donc si j’ai bien compris on a le droit d’utiliser que les fonctions de base ? :??:

fonction de base ?
normalement y a pas besoin de fonction autre que
appel_a_ta_fonction_qui_retourne_la_taille_de_tab
mais si tu y arrive avec des fonctions de bases :slight_smile:

On peut utiliser un conteneur genre je mets le tableau dans une stack ou un vector et on retourne vec.size() ?

non car la tu ne retourne pas la taille du tableau mais la taille du vector ou stack initialisé avec ce tableau.

Le but étant de connaitre la taille du tableau le plus facilement et rapidement possible.
or la avec ta méthode si le tableau fais un millions d’élément …

Donc il faut forcément faire une boucle sur tous les éléments ?

[cpp]
int toto::longTab(int tab[])
{
int res=0,i=0,tab2=tab;
while(tab[i]==tab2[i]){i++;res++;}
return res;
}
[/cpp]

Donc là je fais pointer un 2e tableau au même endroit que le premier, je parcoure les 2 tableaux en même temps et quand ça va dépasser, les tableaux n’auront pas la même valeur. C’est surement pas ça mais je tente ma chance quand même ! :stuck_out_tongue:

Surement pas :fou:
Plutôt que la taille du tableau le prog va sans doute te renvoyer un joli “segmentation fault” :stuck_out_tongue:

C bien ce que pensais mais bon :

  • on n’a pas la taille du tableau
  • on ne sait pas par koi se termine le tableau

Donc soit y a une fonction que je connais pas soit y a la grosse bidouille à faire… :heink:

on peut pas catcher l’erreur et renvoyer le res quand l’erreur est détectée ? [:______]

Moi j’pense que tout bêtement, j’casserai la tête du développeur qu’a pas voulu mettre la taille du tableau dans le 1° élément et qui m’oblige à faire une usine à mazout [:matleflou]

ouep un truc du style:

[cpp]

try { for ( i=0;;i++) j=tab[i] ; }
catch ( std::out_of_range ) { std::cout << "taille est " << i-1 << std::endl; }

[/cpp]

:clap: j’suis sûr que c’est ça :slight_smile:

Si j’avais su coder en C++ c’est ce que j’aurais mis [:yeoh]

c pas mal comme solution :slight_smile:

ffluff->pour le “\0”, c le prog qui le met automatiquement à la fin de ton tableau

Comme je l’ai dis plus le but étant un truc rapide et parcourir tout le tableau c’est pas des plus rapide.

un indice : int tab[10000000];
le type de tab n’est pas int* mais int[10000000]
deplus la methode attendu donne la solution à la compilation et non à l’éxecution.

on doit renvoyer la taille du tableau initialisé (la partie ou ya qqchose?) ? ou la taille avec les espaces mémoire non-initialisés en plus?