it-swarm.com.de

so finden Sie die Größe des 2D-Arrays in C++

Wie finde ich die Größe eines 2D-Arrays in C++? Gibt es eine vordefinierte Funktion wie sizeof, um die Größe des Arrays zu bestimmen?

Kann mir auch jemand sagen, wie ich einen Fehler in der getvalue-Methode für Arrays erkennen kann, während Sie versuchen, einen Wert zu erhalten, der nicht gesetzt ist?

15
user1322915

Angenommen, Sie durften nur ein Array verwenden, dann könnten Sie die Größe eines 2-d-Arrays auf folgende Weise ermitteln.

  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])

sollte den Trick tun

14
Baz1nga

Verwenden Sie einen std::vector.

std::vector< std::vector<int> > my_array; /* 2D Array */

my_array.size(); /* size of y */
my_array[0].size(); /* size of x */

Wenn Sie nur ein gutes altes Array verwenden können, können Sie sizeof verwenden.

sizeof( my_array ); /* y size */
sizeof( my_array[0] ); /* x size */
12
#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;
}

Ausgabe: 6 5

7
enig123

Zusammen mit dem _countof () -Makro können Sie mit der Zeigernotation auf die Arraygröße verweisen, wobei der Arrayname selbst auf die Zeile verweist, der mit dem Arraynamen angefügte Indirektionsoperator die Spalte.

#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

Die anderen Antworten oben haben Ihre erste Frage beantwortet. Was Ihre zweite Frage betrifft, wie Sie einen Fehler beim Abrufen eines nicht festgelegten Werts erkennen können, bin ich mir nicht sicher, welche der folgenden Situationen Sie meinen:

  1. Zugriff auf ein Arrayelement mit einem ungültigen Index:
    Wenn Sie Std :: vector verwenden, können Sie vector :: at function anstelle von [] operator verwenden, um den Wert abzurufen. Wenn der Index ungültig ist, wird eine out_of_range-Ausnahme Ausgelöst .

  2. Zugriff auf einen gültigen Index, aber das Element wurde noch nicht festgelegt: Soweit ich weiß, gibt es keinen direkten Weg. Die folgenden Üblichen Praktiken können jedoch wahrscheinlich Ihr Problem lösen: (1) Initialisiert alle Elemente auf einen Wert, der Ihrer Meinung nach nicht zu erreichen ist. Wenn Sie beispielsweise positive Ganzzahlen verwenden, setzen Sie alle Elemente auf -1, damit Sie wissen, dass der Wert noch nicht festgelegt ist, wenn Sie finde es, dass es -1 ist. (2). Verwenden Sie einfach ein Bool-Array der gleichen Größe für Geben Sie an, ob das Element desselben Index festgelegt ist oder nicht. gilt, wenn alle Werte "möglich" sind.

0
pg30123

int arr [5] [4];

Für den Zeilenindex (4 Erhöhung auf 2, zur Verwendung von pow enthalten): 

sizeof(arr1)/pow(4,2)   

Spaltenindex:

sizeof(*arr1)/4

4 bedeutet 4 Bytes, Größe von int. 

0
blank