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++中我們如何初始化二維數組呢?就這麼簡單:

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

所以,正如您所見,我們初始化了一個2D數組arr,有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循環遍歷行,而內部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

對於上述代碼,我們聲明了一個2X2的2D數組`S`。使用兩個嵌套的for循環,我們遍歷數組的每個元素並獲取相應的用戶輸入。這樣,整個數組就被填滿了,我們打印出來看看結果。

在C++中使用二維數組進行矩陣加法

作為一個例子,讓我們看看如何使用二維數組執行矩陣加法並打印結果。

#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矩陣,並通過將m1[i][j]+m2[i][j]的值更新到相應的元素m3[ i ][ j ]中。通過外部for循環的結束,我們得到我們想要的矩陣,
  • 最後,我們打印出結果矩陣m3。

C++中的二維數組指針

如果我們可以有一個指向整數的指針,一個指向浮點數的指針,一個指向字符的指針,那麼我們不能擁有一個指向數組的指針嗎?當然可以。下面的程序顯示了如何構建和使用它。

#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循環遍歷這5個數組元素,s。對於每次迭代,我們將p賦值為s[i]的地址,
  • 此外,內部for循環使用指針p打印出數組s[i]的個別元素。這裡,(*p + j)給出了元素s[i][j]的地址,因此使用*(*p+j)我們可以訪問相應的值。

將2D數組傳遞給函數

在這一部分,我們將學習如何將2D數組傳遞給任何函數並訪問相應的元素。在下面的代碼中,我們將數組a傳遞給兩個函數show()print(),它們會打印出傳遞的2D數組。

#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]將q定義為指向一個由4個整數組成的數組的指針,
  • q holds the base address of the zeroth 1-D array
  • 然後將這個地址賦給q,一個int指針,然後使用這個指針訪問所有零組數組的元素。
  • 在下一次循環中,當i取值1時,表達式q+i會取得第一個1-D數組的地址。這是因為q是指向零組1-D數組的指針,將1添加到它會給我們下一個1-D數組的地址。這個地址再次賦給q,並使用它訪問下一個1-D數組的所有元素。
  • 在第二個函數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