فصل ۷: آرایهها (Arrays) در C++

مقدمه: آرایه چیست و چرا به آن نیاز داریم؟
تا اینجای دوره دیدیم که متغیرها در C++ فقط میتوانند یک مقدار را ذخیره کنند.
فرض کن بخواهیم نمرات ۱۰۰ دانشآموز را ذخیره کنیم. اگر بخواهیم به صورت دستی ۱۰۰ متغیر جداگانه تعریف کنیم، هم وقت تلف میشود و هم مدیریتشان خیلی سخت خواهد بود.
اینجاست که آرایهها به کمک ما میآیند.
آرایه یک مجموعهٔ پیوسته از خانههای حافظه است که همگی یک نوع داده دارند و با استفاده از اندیس (index) میتوانیم به آنها دسترسی پیدا کنیم.
مثال تصویری (در ذهن)
آرایه را شبیه یک قطار در نظر بگیر:
- هر واگن قطار یک خانه از آرایه است.
- همه واگنها شکل و اندازه یکسان دارند.
- شمارهٔ هر واگن برابر اندیس آن خانه است.
- شمارهگذاری از صفر شروع میشود.
ساختار کلی تعریف آرایه
برای تعریف یک آرایه در C++ از دستور زیر استفاده میکنیم:
نوع_داده نام_آرایه[تعداد_عناصر];
- نوع_داده: نوع مقادیری که قرار است آرایه نگهداری کند (مثل
int,double,char). - نام_آرایه: اسم دلخواه که قوانین نامگذاری متغیرها را رعایت کند.
- تعداد_عناصر: طول آرایه که در زمان تعریف مشخص و ثابت است (برای آرایههای معمولی).
مثال:
int numbers[5];
یعنی:
- آرایهای به نام
numbers - با ۵ عنصر (
numbers[0]تاnumbers[4]) - نوع دادهٔ هر عنصر: عدد صحیح (
int)
طول آرایه و اندیسها
- اندیسها از ۰ شروع و تا طول آرایه – ۱ ادامه دارند.
- مثال: اگر طول آرایه ۵ باشد، اندیسها
0,1,2,3,4هستند.
مقداردهی اولیه به آرایهها
مقداردهی کامل هنگام تعریف
int nums[5] = {1, 2, 3, 4, 5};
مقداردهی خودکار با حذف طول
int nums[] = {10, 20, 30};
طول آرایه اینجا برابر تعداد مقادیر داخل {} است.
مقداردهی ناقص
int nums[5] = {10, 20};
دو خانه اول پر میشوند، بقیه خودکار با صفر مقداردهی میشوند.
دسترسی به عناصر و تغییر مقادیر
با استفاده از اندیس:
int nums[3] = {5, 10, 15};
cout << nums[0]; // نمایش 5
nums[1] = 20; // تغییر خانه دوم به 20
استفاده از حلقهها برای کار با آرایه
مثال چاپ همه عناصر:
#include <iostream>
using namespace std;
int main() {
int nums[5] = {2, 4, 6, 8, 10};
for (int i = 0; i < 5; i++) {
cout << "nums[" << i << "] = " << nums[i] << endl;
}
return 0;
}
گرفتن ورودی از کاربر
#include <iostream>
using namespace std;
int main() {
int nums[5];
for (int i = 0; i < 5; i++) {
cout << "عدد " << i+1 << " را وارد کنید: ";
cin >> nums[i];
}
cout << "مقادیر وارد شده:" << endl;
for (int i = 0; i < 5; i++) {
cout << nums[i] << " ";
}
return 0;
}
محدودیتهای آرایههای ساده
- طول ثابت.
- نوع دادهٔ یکسان.
- عدم بررسی محدوده توسط کامپایلر.
آرایهها و حافظه
آرایهها در حافظه به صورت پیوسته قرار میگیرند. این باعث میشود به خانهها با سرعت بالا دسترسی پیدا کنیم.
آرایهها و توابع
وقتی آرایهای را به تابع میدهید، فقط آدرس اولین خانه (pointer) ارسال میشود.
مثال:
#include <iostream>
using namespace std;
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
int main() {
int nums[5] = {1, 2, 3, 4, 5};
printArray(nums, 5);
}
آرایههای چندبعدی
تعریف و استفاده
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
دسترسی:
cout << matrix[1][2]; // نمایش 6
آرایههای کاراکتری (C-Style Strings)
یک رشتهٔ کاراکتری در C++ میتواند با آرایه char ساخته شود و با \0 (null terminator) پایان مییابد.
مثال:
char name[6] = "Ali";
حافظه:
'A' 'l' 'i' '\0'
مشکلات خروج از محدوده
اگر اندیسی خارج از محدوده استفاده کنید:
nums[10] = 50; // خطرناک!
ممکن است برنامه کرش کند یا دادهها خراب شوند.
نکات بهینهسازی
- استفاده از
constبرای اندازه آرایه. - استفاده از
std::arrayیاstd::vectorبرای انعطاف بیشتر (در فصول بعد توضیح داده میشود).
مثال کاربردی: مرتبسازی آرایه
#include <iostream>
using namespace std;
int main() {
const int SIZE = 5;
int nums[SIZE] = {5, 3, 4, 1, 2};
for (int i = 0; i < SIZE - 1; i++) {
for (int j = i + 1; j < SIZE; j++) {
if (nums[i] > nums[j]) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
for (int i = 0; i < SIZE; i++)
cout << nums[i] << " ";
}
تمرینها
۱. برنامهای که ۱۰ عدد بگیرد و بزرگترین عدد را پیدا کند.
۲. برنامهای که مجموع و میانگین عناصر آرایه را محاسبه کند.
۳. برنامهای که یک ماتریس ۳×۳ بگیرد و مجموع هر سطر و هر ستون را چاپ کند.
۴. برنامهای که آرایه را برعکس چاپ کند.
جمعبندی
- آرایه مجموعهای از عناصر همنوع است.
- اندیس از صفر شروع میشود.
- طول برای آرایههای استاتیک ثابت است.
- هنگام خروج از محدوده هیچ خطایی داده نمیشود، اما خطرناک است.
- آرایهها ابزار پایه برای ذخیره دادههای پشتسرهم هستند.