المصفوفات Arrays — أساسيات C++
المصفوفات (Arrays)
المصفوفة تخزن عدداً ثابتاً من العناصر من نفس النوع متجاورة في الذاكرة.
int scores[5] = {90, 75, 88, 62, 95};
int zeros[100] = {}; // كل العناصر 0
int auto_size[] = {1, 2, 3}; // الحجم 3 تلقائياًالفهرسة
الفهرس من 0 إلى الحجم - 1:
scores[0] = 100;
cout << scores[4];⚠️ لا يوجد فحص للحدود
cout << scores[5]; // خارج المصفوفة: سلوك غير معرّف!Python ترمي IndexError. أما C++ فتقرأ (أو تكتب!) ما يوجد في الذاكرة بعد المصفوفة: قد يعطي قيمة عشوائية، أو يفسد متغيرات أخرى، أو يوقف البرنامج. هذا من أخطر أخطاء C++، ومصدر ثغرات أمنية حقيقية (buffer overflow).
الحجم ثابت
يجب أن يُعرف الحجم وقت الترجمة، ولا يمكن تكبير المصفوفة بعد إنشائها. لهذا ستستخدم في أغلب البرامج std::vector (الدرس التالي).
المرور على العناصر
for (int i = 0; i < 5; i++) cout << scores[i];
for (int s : scores) cout << s;احفظ الحجم في ثابت واحد (const int SIZE = 5;) واستخدمه في كل مكان بدل تكرار الرقم.
المصفوفة ثنائية الأبعاد
int grid[2][3] = {{1, 2, 3}, {4, 5, 6}};
cout << grid[1][2]; // 6تمرير المصفوفة لدالة
المصفوفة لا تعرف حجمها عند تمريرها؛ مرّر الحجم معها: double average(const int arr[], int size).
std::array: البديل الحديث للحجم الثابت
#include <array>
array<int, 3> a = {1, 2, 3};
a.size(); // 3 (تعرف حجمها)
a.at(5); // ترمي استثناء بدل السلوك غير المعرّفتمرين
خزّن درجات 7 أيام في مصفوفة، واطبع أعلى درجة ويومها، وعدد الأيام فوق المتوسط.
#include <iostream>
using namespace std;
int main() {
// تصريح وتهيئة
int numbers[5] = {10, 20, 30, 40, 50};
// الوصول للعناصر
cout << "الأول: " << numbers[0] << endl; // 10
cout << "الثالث: " << numbers[2] << endl; // 30
// تعديل عنصر
numbers[0] = 100;
cout << "الأول الجديد: " << numbers[0] << endl;
// المرور على المصفوفة
cout << "كل العناصر: ";
for (int i = 0; i < 5; i++) {
cout << numbers[i] << " ";
}
cout << endl;
// Range-based for
for (int n : numbers) {
cout << n << " ";
}
cout << endl;
// حساب المجموع والمتوسط
int sum = 0;
for (int n : numbers) {
sum += n;
}
double average = (double)sum / 5;
cout << "المجموع: " << sum << endl;
cout << "المتوسط: " << average << endl;
// إيجاد أكبر عنصر
int maxVal = numbers[0];
for (int n : numbers) {
if (n > maxVal) {
maxVal = n;
}
}
cout << "الأكبر: " << maxVal << endl;
// مصفوفة ثنائية الأبعاد
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
cout << "\nالمصفوفة:" << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
// sizeof للمصفوفات
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "\nحجم المصفوفة: " << size << endl;
return 0;
}اختبر فهمك