web-dev-qa-db-fra.com

comment trouver la taille d'un tableau 2d en c ++

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?

15
user1322915

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
25
SridharKritha
sizeof(yourObj)/sizeOf(yourObj[0])

devrait faire l'affaire

14
Baz1nga

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 */
12
ApprenticeHacker
#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

7
enig123

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;
}
2
poorgoat
#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 ;
    }
}
1
Ridowan Ahmed

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:

  1. 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. .

  2. 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".

0
pg30123

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. 

0
blank