Twee-dimensionale Array in C++

Inleiding

A two-dimensional array in C++ is the simplest form of a multi-dimensional array. It can be visualized as an array of arrays. The image below depicts a two-dimensional array.

2D Array Representation

A two-dimensional array is also called a matrix. It can be of any type like integer, character, float, etc. depending on the initialization. In the next section, we are going to discuss how we can initialize 2D arrays.

Initialiseren van een 2D-array in C++

Dus, hoe initialiseren we een tweedimensionale array in C++? Zo eenvoudig als dit:

int arr[4][2] = {
{1234, 56},
{1212, 33},
{1434, 80},
{1312, 78}
} ;

Zoals je kunt zien, initialiseren we een 2D-array arr, met 4 rijen en 2 kolommen als een array van arrays. Elk element van de array is opnieuw een array van integers.

We kunnen ook een 2D array initialiseren op de volgende manier.

int arr[4][2] = {1234, 56, 1212, 33, 1434, 80, 1312, 78};

In dit geval is arr ook een 2D-array met 4 rijen en 2 kolommen.

Printen van een 2D-array in C++

We hebben een 2D-array geïnitialiseerd, maar zonder deze daadwerkelijk af te drukken, kunnen we niet bevestigen dat dit correct is gebeurd.

Ook moeten we in veel gevallen een resulterende 2D-array afdrukken na het uitvoeren van enkele bewerkingen. Hoe doen we dat?

Onderstaande code laat zien hoe we dat kunnen doen.

#include<iostream>
using namespace std; 
main( ) 
{  
	int arr[4][2] = {
		{ 10, 11 },
		{ 20, 21 },
		{ 30, 31 },
		{ 40, 41 }
		} ;
		
	int i,j;
	
	cout<<"Printing a 2D Array:\n";
	for(i=0;i<4;i++)
	{
		for(j=0;j<2;j++)
		{
			cout<<"\t"<<arr[i][j];
		}
		cout<<endl;
	}
}

Uitvoer:

Printing A 2D Array

In de bovenstaande code,

  • We initialiseren eerst een 2D-array, arr[4][2], met bepaalde waarden,
  • Daarna proberen we de respectieve array af te drukken met behulp van twee for-lussen,
  • De buitenste for-lus doorloopt de rijen, terwijl de binnenste lus door de kolommen van de 2D-array loopt,
  • Dus, voor elke iteratie van de buitenste lus, neemt i toe en brengt ons naar de volgende 1D-array. Ook doorloopt de binnenste lus de hele 1D-array per keer,
  • En dienovereenkomstig drukken we het individuele element arr[ i ][ j ] af.

2D-arrayelementen als invoer van de gebruiker nemen

Eerder zagen we hoe we een 2D-array met vooraf gedefinieerde waarden kunnen initialiseren. Maar we kunnen het ook als gebruikersinvoer maken. Laten we eens kijken hoe

#include<iostream>
using namespace std; 
main( ) 
{  
      int  s[2][2];
      int  i, j;
      cout<<"\n2D Array Input:\n";
	  for(i=0;i<2;i++)
	  {
	  	for(j=0;j<2;j++)
	  	{
	  		cout<<"\ns["<<i<<"]["<<j<<"]=  ";
	  		cin>>s[i][j];
		}
	  } 
	  
	  cout<<"\nThe 2-D Array is:\n";
      for(i=0;i<2;i++)
	  {
	  	for(j=0;j<2;j++)
	  	{
	  		cout<<"\t"<<s[i][j];
		}
		cout<<endl;
	  } 
} 

Output:

2D Array User Input

Voor de bovenstaande code verklaren we een 2X2 2D-array s. Met behulp van twee geneste for-lussen doorlopen we elk element van de array en nemen we de overeenkomstige gebruikersinvoer. Op deze manier wordt de hele array gevuld, en we drukken hetzelfde af om de resultaten te zien.

Matrixoptelling met tweedimensionale arrays in C++

Als voorbeeld kijken we hoe we 2D-arrays kunnen gebruiken om matrixoptelling uit te voeren en het resultaat af te drukken.

#include<iostream>
using namespace std; 
main() 
{  
      int  m1[5][5], m2[5][5], m3[5][5];
      int  i, j, r, c;
      
      cout<<"Enter the no.of rows of the matrices to be added(max 5):";
      cin>>r;
      cout<<"Enter the no.of columns of the matrices to be added(max 5):";
      cin>>c;
      
      cout<<"\n1st Matrix Input:\n";
	  for(i=0;i<r;i++)
	  {
	  	for(j=0;j<c;j++)
	  	{
	  		cout<<"\nmatrix1["<<i<<"]["<<j<<"]=  ";
	  		cin>>m1[i][j];
		}
	  } 
	  
	  cout<<"\n2nd Matrix Input:\n";
	  for(i=0;i<r;i++)
	  {
	  	for(j=0;j<c;j++)
	  	{
	  		cout<<"\nmatrix2["<<i<<"]["<<j<<"]=  ";
	  		cin>>m2[i][j];
		}
	  } 
	  
	  cout<<"\nAdding Matrices...\n";
	  
	  for(i=0;i<r;i++)
	  {
	  	for(j=0;j<c;j++)
	  	{
	  		m3[i][j]=m1[i][j]+m2[i][j];
		}
	  } 
	  
	  cout<<"\nThe resultant Matrix is:\n";

	  for(i=0;i<r;i++)
	  {
	  	for(j=0;j<c;j++)
	  	{
	  		cout<<"\t"<<m3[i][j];
		}
		cout<<endl;
	  } 
	  
} 

Output:

Matrix Addition Using 2D Arrays

Hier,

  • We nemen twee matrices m1 en m2 met maximaal 5 rijen en 5 kolommen. En een andere matrix m3 waarin we het resultaat gaan opslaan,
  • Als gebruikersinvoer hebben we het aantal rijen en kolommen voor beide matrices genomen. Aangezien we matrixoptelling uitvoeren, moeten het aantal rijen en kolommen voor beide matrices gelijk zijn,
  • Daarna nemen we beide matrices als gebruikersinvoer, opnieuw met behulp van geneste for-lussen,
  • Op dit punt hebben we beide matrices m1 en m2,
  • vervolgens lopen we door de m3-matrix, met behulp van twee for-lussen en werken we de respectieve elementen bij m3[ i ][ j ] met de waarde van m1[i][j]+m2[i][j]. Op deze manier krijgen we aan het einde van de buitenste for-lus onze gewenste matrix,
  • Tenslotte drukken we de resulterende matrix m3 af.

Pointer naar een 2D-array in C++

Als we een pointer naar een integer kunnen hebben, een pointer naar een float, een pointer naar een char, kunnen we dan niet ook een pointer naar een array hebben? Dat kunnen we zeker. Het volgende programma toont hoe je dit kunt bouwen en gebruiken.

#include<iostream>
using namespace std;
/* Gebruik van pointer naar een array */ 
main( ) 
{  
      int  s[5][2] = {
           {1, 2},
           {1, 2},
           {1, 2},
           {1, 2}
           } ;
           
      int (*p)[2] ;
      int  i, j;
      for (i = 0 ; i <= 3 ; i++)
      {
      		p=&s[i];
      		cout<<"Row"<<i<<":";
            for (j = 0; j <= 1; j++)
                cout<<"\t"<<*(*p+j);
            cout<<endl;
      } 
      
}

Output:

2D Array Pointer

Hier,

  • In de bovenstaande code proberen we een 2D-array af te drukken met behulp van pointers,
  • Zoals we eerder hebben gedaan, initialiseren we eerst de 2D-array, s[5][2]. En ook een pointer (*p)[2], waar p een pointer is die het adres van een array met 2 elementen opslaat,
  • Zoals we al zeiden, kunnen we een 2D-array opbreken als een array van arrays. Dus in dit geval is s eigenlijk een array met 5 elementen, die verder eigenlijk arrays zijn met 2 elementen voor elke rij.
  • We gebruiken een for-lus om over deze 5 elementen van de array s te gaan. Voor elke iteratie wijzen we p toe met het adres van s[i],
  • Verder drukt de innerlijke for-lus de afzonderlijke elementen van de array s[i] af met behulp van de pointer p. Hier geeft (*p + j) ons het adres van het afzonderlijke element s[i][j], dus met behulp van *(*p+j) kunnen we de overeenkomstige waarde benaderen.

Het doorgeven van een 2D-array aan een functie

In dit gedeelte gaan we leren hoe we een 2D-array aan een willekeurige functie kunnen doorgeven en de overeenkomstige elementen kunnen benaderen. In de onderstaande code geven we de array a door aan twee functies show() en print() die de doorgegeven 2D-array afdrukken.

#include<iostream>
using namespace std;   
 
void show(int (*q)[4], int  row, int  col)
{
	int  i, j ;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
    		cout<<"\t"<<*(*(q + i)+j); 
		cout<<"\n";
	}  
    cout<<"\n";
} 
 
void print(int  q[][4], int row, int col)
{
    int  i, j; 
    for(i=0;i<row;i++)
    {   
	 for(j=0;j<col;j++)
   	    	cout<<"\t"<<q[i][j];
   	 cout<<"\n";
	}
   cout<<"\n";
}
 
int main() 
{
  int  a[3][4] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21} ; 
 
  show (a, 3, 4);
  print (a, 3, 4);
  return 0;
} 

Uitvoer:

Passing 2D Array To Functions

Hier,

  • In de show( )-functie hebben we q gedefinieerd als een pointer naar een array van 4 integers via de declaratie int (*q)[4],
  • q holds the base address of the zeroth 1-D array
  • Dit adres wordt vervolgens toegewezen aan q, een int-pointer, en vervolgens worden met behulp van deze pointer alle elementen van het nulde 1D-array benaderd.
  • De volgende keer in de lus wanneer i de waarde 1 aanneemt, haalt de expressie q+i het adres van het eerste 1-D-array op. Dit komt doordat q een pointer is naar het nulde 1-D-array en er 1 aan toevoegen ons het adres van het volgende 1-D-array geeft. Dit adres wordt opnieuw toegewezen aan q en met behulp daarvan worden alle elementen van het volgende 1-D-array benaderd
  • In de tweede functie print(), ziet de declaratie van q er als volgt uit: int q[][4],
  • Dit is hetzelfde als int (*q )[4], waar q een pointer is naar een array van 4 integers. Het enige voordeel is dat we nu de meer vertrouwde expressie q[i][j] kunnen gebruiken om array-elementen te benaderen. We hadden dezelfde expressie ook in show() kunnen gebruiken, maar voor een beter begrip van het gebruik van pointers gebruiken we pointers om elk element te benaderen.

Conclusie

Dus, in dit artikel hebben we tweedimensionale arrays in C++ besproken, hoe we verschillende bewerkingen kunnen uitvoeren en de toepassing ervan in matrixoptelling. Voor verdere vragen kunt u gerust de opmerkingen gebruiken.

Referenties

Source:
https://www.digitalocean.com/community/tutorials/two-dimensional-array-in-c-plus-plus