Comment trouver la taille d'un tableau 2D en C++? Existe-t-il une fonction prédéfinie telle que sizeof
pour déterminer la taille du tableau?
De même, quelqu'un peut-il me dire comment détecter une erreur dans la méthode getvalue
pour les tableaux tout en essayant d'obtenir une valeur non définie?
Supposons que vous n'ayez le droit d'utiliser qu'un tableau, alors vous pouvez trouver la taille d'un tableau 2-d de la manière suivante.
int ary[][5] = { {1, 2, 3, 4, 5},
{6, 7, 8, 9, 0}
};
int rows = sizeof ary / sizeof ary[0]; // 2 rows
int cols = sizeof ary[0] / sizeof(int); // 5 cols
sizeof(yourObj)/sizeOf(yourObj[0])
devrait faire l'affaire
Utilisez un std::vector
.
std::vector< std::vector<int> > my_array; /* 2D Array */
my_array.size(); /* size of y */
my_array[0].size(); /* size of x */
Ou, si vous ne pouvez utiliser qu'un bon vieux tableau, vous pouvez utiliser sizeof
.
sizeof( my_array ); /* y size */
sizeof( my_array[0] ); /* x size */
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
int arr[6][5] = {
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5},
{1,2,3,4,5}
};
int rows = sizeof(arr)/sizeof(arr[0]);
int cols = sizeof(arr[0])/sizeof(arr[0][0]);
cout<<rows<<" "<<cols<<endl;
return 0;
}
Sortie: 6 5
Avec la macro _countof (), vous pouvez faire référence à la taille du tableau à l’aide de la notation par pointeur, le nom du tableau faisant référence à la ligne, l’opérateur indirection ajouté par le nom du tableau faisant référence à la colonne.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int beans[3][4]{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
cout << "Row size = " << _countof(beans) // Output row size
<< "\nColumn size = " << _countof(*beans); // Output column size
cout << endl;
// Used in a for loop with a pointer.
int(*pbeans)[4]{ beans };
for (int i{}; i < _countof(beans); ++i) {
cout << endl;
for (int j{}; j < _countof(*beans); ++j) {
cout << setw(4) << pbeans[i][j];
}
};
cout << endl;
}
#include<iostream>
using namespace std ;
int main()
{
int A[3][4] = { {1,2,3,4} , {4,5,7,8} , {9,10,11,12} } ;
for(int rows=0 ; rows<sizeof(A)/sizeof(*A) ; rows++)
{
for(int columns=0 ; columns< sizeof(*A) / sizeof(*A[0]) ; columns++)
{
cout<<A[rows][columns] <<"\t" ;
}
cout<<endl ;
}
}
Les autres réponses ci-dessus ont répondu à votre première question ... En ce qui concerne votre deuxième question, comment détecter une erreur d'obtenir une valeur qui n'est pas définie, je ne sais pas de quelle situation vous parlez:
Accéder à un élément de tableau à l'aide d'un index non valide:
Si vous utilisez Std :: vector, vous pouvez utiliser vector :: at function au lieu de [] operator pour obtenir la valeur, si l'index n'est pas valide, une exception out_of_range Sera levée. .
Accéder à un index valide, mais l’élément n’a pas encore été défini: Pour autant que je sache, il n’existe aucun moyen direct de le faire. Cependant, les pratiques courantes suivantes peuvent probablement résoudre votre problème: (1) Initialise tous les éléments sur une valeur impossible à obtenir. Par exemple, si vous avez affaire à des entiers positifs, définissez tous les éléments sur -1 afin que vous sachiez que la valeur n'est pas encore définie lorsque vous trouve que c'est -1. (2). Utilisez simplement un tableau bool de la même taille que indiquez si l'élément du même index est défini ou non, this s'applique lorsque toutes les valeurs sont "possibles".
int arr [5] [4];
Pour l’indice de ligne (4 augmentations sur 2, incluez cmath pour utiliser pow ):
sizeof(arr1)/pow(4,2)
Indice de colonne:
sizeof(*arr1)/4
4 signifie 4 octets, la taille de int.