آرایه دو بعدی در C++ – انجمن DEV

معرفی
یک آرایه دو بعدی چیزی نیست جز یک آرایه غول پیکر از آرایه های یک بعدی. در یک آرایه 1 بعدی معمولی میتوانیم ببینیم که آرایه حاوی دادههایی مانند int، char، double، string و غیره است. به همین ترتیب، یک آرایه دو بعدی به جای داده، حاوی آرایههای 1 بعدی است. بنابراین می توانیم آن را آرایه ای از آرایه ها بنامیم.
اعلامیه و مقداردهی اولیه
int row = 3;
int column = 4
int arr[row][column] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
برای اعلان یک آرایه دو بعدی، نام آرایه را به دنبال آن شماره ردیف و ستون آن می نویسیم. بنابراین در مثال، آرایه arr
شامل 3 سطر و 4 ستون برای مقداردهی اولیه، سطرها را به صورت یک آرایه 1 بعدی می نویسیم و آرایه را با عناصری برابر با شماره ستون پر می کنیم.
ما می توانیم یک آرایه دو بعدی را نیز مانند این مقداردهی کنیم-
int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
این آرایه نیز 3 سطر و 4 ستون دارد اما کمی سازماندهی شده به نظر می رسد. بنابراین رویکرد اول ترجیح داده می شود.
پیمایش آرایه دو بعدی
برای پیمایش یک آرایه دوبعدی از یک حلقه for تو در تو استفاده می کنیم. ما می توانیم یک آرایه دو بعدی را به دو صورت طی کنیم:
- پیمایش ردیف اصلی
- تراورس اصلی ستون
پیمایش ردیف اصلی
این روش معمول پیمایش یک آرایه دو بعدی است. ما می توانیم این کار را با یک حلقه for تو در تو مانند این انجام دهیم-
int row = 3, col = 4;
int arr[row][col] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
cout << arr[i][j] << " ";
//output: 1 2 3 4 5 6 7 8 9 10 11 12
}
}
در پیمایش ردیف اصلی، حلقه بیرونی روی ردیف ها تکرار می شود در حالی که حلقه داخلی روی ستون تکرار می شود. در نتیجه وقتی دسترسی داریم arr[i][j]
در هر تکرار، عناصر سطر به سطر را دریافت می کنیم.
تراورس اصلی ستون
این یک راه دشوار برای پیمایش است و در بیشتر جاها آموزش داده نمی شود. ما می توانیم پیمایش ستون اصلی را با یک حلقه for تو در تو مانند این انجام دهیم-
int row = 3, col = 4;
int arr[row][col] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
for(int i = 0; i < col; i++)
{
for(int j = 0; j < row; j++)
{
cout << arr[j][i] << " ";
//output: 1 5 9 2 6 10 3 7 11 4 8 12
}
}
در پیمایش ستون اصلی، حلقه بیرونی روی ستون تکرار می شود در حالی که حلقه داخلی روی ردیف ها تکرار می شود. نکته قابل توجه – اینجا ما در حال بازدید هستیم arr[j][i]
بجای arr[i][j]
یعنی ما در حال بازدید از عناصر هر ستون هستیم.
اشاره گر به آرایه دو بعدی
اگر بتوانیم یک اشاره گر به یک عدد صحیح، یک اشاره گر به یک شناور، یک اشاره گر به یک کاراکتر داشته باشیم، آیا می توانیم یک اشاره گر برای آرایه دو بعدی نیز داشته باشیم. برنامه زیر نحوه ساخت و استفاده از آن را نشان می دهد.
int row = 3, col = 4;
int arr[row][col] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
int *p;
for (int i = 0 ; i < 3 ; i++)
{
p = &arr[i][0];
cout << "Row " << i << ":";
for (int j = 0; j < 4; j++)
cout << "\t" << *(p+j);
cout << endl;
}
در کد بالا سعی می کنیم با استفاده از اشاره گرها یک آرایه دو بعدی چاپ کنیم. ابتدا یک آرایه دو بعدی را مقداردهی اولیه می کنیم، arr[row][col]
و یک اشاره گر (*p)[4]
، جایی که پ اشاره گر است که آدرس اولین عنصر آرایه را ذخیره می کند. ما از یک حلقه for برای عبور از این 3 عنصر آرایه دو بعدی استفاده می کنیم arr
. برای هر تکرار، ما اختصاص می دهیم پ با آدرس arr[i][0]
، که آدرس اولین عنصر هر سطر است. علاوه بر این، حلقه for داخلی، عناصر جداگانه آرایه را چاپ می کند arr[i]
با استفاده از اشاره گر پ. اینجا، *(p + j)
آدرس عنصر فردی را به ما می دهد arr[i][j]
، بنابراین با استفاده از *(p+j)
می توانیم به مقدار مربوطه دسترسی پیدا کنیم.
ارسال یک آرایه دو بعدی در یک تابع
ما میتوانیم آرایه دوبعدی را مانند هر داده دیگری به عنوان پارامتر تابع به آن منتقل کنیم. در کد زیر، آرایه arr را به یک تابع ارسال می کنیم printArray()
که آرایه 2 بعدی ارسال شده را چاپ می کند.
#include<iostream>
using namespace std;
void printArray(int a[][4], int row, int col)
{
for(int i = 0 ; i < row; i++)
{
for(int j = 0; j < col; j++)
cout << "\t" << a[i][j];
cout << "\n";
}
cout << "\n";
}
int main()
{
int arr[3][4] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21} ;
printArray(arr, 3, 4);
return 0;
}
در تابع printArray()
، اعلامیه آ به نظر می رسد این است: int a[][4]
. اینجا آ اشاره گر به آرایه ای از 4 عدد صحیح است. در داخل تابع می توانیم از آرایه استفاده کنیم همانطور که در جاهای دیگر استفاده کردیم.
نتیجه
در این مقاله ما در مورد آرایه دو بعدی C++، نحوه عبور از آن، نحوه داشتن یک اشاره گر از آن و در نهایت نحوه انتقال آن به یک تابع بحث کردیم. اگر ابهام یا سوالی دارید، می توانید من را در samiunblack@gmail.com بیاورید. کد نویسی مبارک