C++에서 이차원 배열

소개

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.

C++에서 2D 배열 초기화

그래서 C++에서 2D 배열을 어떻게 초기화하나요? 아주 간단합니다:

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

보시다시피, 우리는 arr이라는 2D 배열을 만들고, 각각의 배열이 정수 배열인 4행과 2열을 갖도록 초기화합니다.

다음과 같은 방법으로도 2D 배열을 초기화할 수 있습니다.

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

이 경우에도 arr은 4행 2열의 2D 배열입니다.

C++에서 2D 배열 출력

2D 배열을 초기화했으니, 실제로 출력하지 않으면 올바르게 수행되었는지 확인할 수 없습니다.

또한 많은 경우에는 몇 가지 작업을 수행한 후에 결과 2D 배열을 출력해야 할 수도 있습니다. 그렇다면 어떻게 할까요?

아래 코드는 우리가 그것을 어떻게 할 수 있는지 보여줍니다.

#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;
	}
}

출력:

Printing A 2D Array

위의 코드에서,

  • 먼저, 특정 값으로 2D 배열 arr[4][2]을 초기화합니다.
  • 그 후, 두 개의 for 루프를 사용하여 해당 배열을 출력하려고 합니다.
  • 바깥쪽 for 루프는 행을 반복하고 내부 루프는 2D 배열의 열을 반복합니다.
  • 따라서 바깥쪽 루프의 각 반복에서 i가 증가하여 다음 1D 배열로 이동합니다. 또한 내부 루프는 한 번에 전체 1D 배열을 탐색합니다.
  • 그리고 그에 따라 개별 요소 arr[i][j]를 출력합니다.

사용자 입력을 사용하여 2D 배열 요소 입력받기

이전에 우리는 미리 정의된 값으로 2D 배열을 초기화하는 방법을 보았습니다. 그러나 사용자 입력으로 만들 수도 있습니다. 이제 그것을 보겠습니다.

#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;
	  } 
} 

출력:

2D Array User Input

위의 코드에서 s라는 2X2 2D 배열을 선언합니다. 두 개의 중첩된 for 루프를 사용하여 배열의 각 요소를 순회하고 해당하는 사용자 입력을 받습니다. 이렇게 하면 전체 배열이 채워지고 결과를 확인하기 위해 동일한 배열을 출력합니다.

C++에서 2차원 배열을 사용한 행렬 덧셈

예를 들어, 우리는 어떻게 2D 배열을 사용하여 행렬 덧셈을 수행하고 결과를 출력할 수 있는지 살펴보겠습니다.

#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;
	  } 
	  
} 

출력:

Matrix Addition Using 2D Arrays

여기서,

  • 우리는 최대 5행 5열의 두 행렬 m1m2를 가지고 있습니다. 그리고 결과를 저장할 또 다른 행렬 m3를 가지고 있습니다,
  • 사용자 입력으로, 우리는 두 행렬 모두의 행과 열의 수를 받았습니다. 행렬 덧셈을 수행하기 때문에, 두 행렬의 행과 열의 수는 동일해야 합니다,
  • 그 후에, 우리는 중첩된 for 루프를 다시 사용하여 두 행렬을 사용자 입력으로 받습니다,
  • 이 시점에서, 우리는 두 행렬 m1m2를 가지고 있습니다,
  • 그런 다음 우리는 두 개의 for 루프를 사용하여 m3 행렬을 순회하고 각각의 요소 m3[ i ][ j ]m1[i][j]+m2[i][j]의 값으로 업데이트합니다. 이런 방식으로, 외부 for 루프의 끝에서 우리는 원하는 행렬을 얻습니다,
  • 마지막으로, 우리는 결과 행렬 m3를 출력합니다.

C++에서 2D 배열에 대한 포인터

정수, 실수, 문자에 대한 포인터가 있을 수 있다면, 배열에 대한 포인터는 없을 수 없습니다. 그럴 수 있습니다. 다음 프로그램은 이를 구축하고 사용하는 방법을 보여줍니다.

#include<iostream>
using namespace std;
/* 배열에 대한 포인터의 사용 */ 
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;
      } 
      
}

출력:

2D Array Pointer

여기에서,

  • 위의 코드에서 포인터를 사용하여 2D 배열을 출력하려고 시도합니다,
  • 이전에 했던 것처럼, 우리는 먼저 2D 배열을 초기화합니다. s[5][2] 그리고 또한 포인터 (*p)[2]를 초기화합니다. 여기서 p는 2개의 요소를 가진 배열의 주소를 저장하는 포인터입니다,
  • 이미 말했듯이, 2D 배열을 배열의 배열로 분해할 수 있습니다. 따라서 이 경우에 s는 실제로 5개의 요소를 가진 배열이며, 각 행마다 실제로 2개의 요소를 가진 배열입니다.
  • 우리는 for 루프를 사용하여 이러한 배열의 s 5개 요소를 순회합니다. 각 반복에서, 우리는 s[i]의 주소를 p에 할당합니다,
  • 또한 내부 for 루프에서 포인터 p를 사용하여 배열 s[i]의 각 요소를 출력합니다. 여기서 (*p + j)는 개별 요소 s[i][j]의 주소를 제공하므로, *(*p+j)를 사용하여 해당 값을 액세스할 수 있습니다.

함수에 2D 배열 전달하기

이 섹션에서는 2D 배열을 함수에 전달하고 해당 요소에 액세스하는 방법을 배우게 됩니다. 아래 코드에서, 우리는 전달된 2D 배열을 출력하는 두 함수 show()print()에 배열 a를 전달합니다.

#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;
} 

출력:

Passing 2D Array To Functions

여기에서,

  • show() 함수에서는 int (*q)[4]로 선언하여 4개의 정수로 이루어진 배열을 가리키는 포인터 q를 정의합니다.
  • q holds the base address of the zeroth 1-D array
  • 그런 다음 이 주소를 int 포인터인 q에 할당하고 이 포인터를 사용하여 첫 번째 1차원 배열의 모든 요소에 접근합니다.
  • 루프를 다음 번에 진행할 때 i1의 값을 가질 때, 표현식 q+i는 첫 번째 1차원 배열의 주소를 가져옵니다. 이는 q가 첫 번째 1차원 배열을 가리키는 포인터이며, 1을 더하면 다음 1차원 배열의 주소를 얻을 수 있기 때문입니다. 이 주소는 다시 q에 할당되고 이를 사용하여 다음 1차원 배열의 모든 요소에 접근합니다.
  • 두 번째 함수인 print()에서 q의 선언은 다음과 같습니다: int q[][4],
  • 이것은 int (*q)[4]와 같으며, q는 4개의 정수로 이루어진 배열을 가리키는 포인터입니다. 유일한 장점은 이제 더 익숙한 표현식 q[i][j]를 사용하여 배열 요소에 접근할 수 있다는 것입니다. show()에서도 동일한 표현식을 사용할 수 있지만 포인터의 사용 방법을 더 잘 이해하기 위해 각 요소에 접근하기 위해 포인터를 사용합니다.

결론

그래서 이 기사에서는 C++에서의 이차원 배열에 대해 논의했습니다. 다양한 작업을 수행하는 방법과 행렬 덧셈에서의 응용에 대해 다뤘습니다. 추가 질문이 있으면 댓글을 자유롭게 사용해주세요.

참고문헌

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