C++ الكلاس array

تعريف الكلاس array

تم إضافة هذا الكلاس إبتداءاً من الإصدر c++11 و هو يستخدم لإنشاء كائن يمثل مصفوفة متطورة مقارنةً بالمصفوفة العادية حيث أن التعامل معها مرن أكثر لأنك تستطيع معرفة عدد عناصرها و الحصول على قيمة أول و آخر عنصر فيها بكل سهولة.

بعد أن يتم تحديد عدد العناصر التي يمكن إضافتها فيه, لا يمكن تغييره كما هو الحال في المصفوفات العادية.

لاستخدام الكلاس array يجب تضمين الملف #include<array> لأنه موجود فيه.


بناء الكلاس

template < class T, size_t N >
class array
	

إذاً عند إنشاء كائن من الكلاس array يجب أن نمرر له نوع البيانات الذي نريد تخزينه فيه مكان الباراميتر T و عدد العناصر الأقصى الذي قد نحتاج تخزينه فيه مكان الباراميتر .N

دوال الكلاس array

الجدول التالي يحتوي على دوال الكلاس array الأكثر إستخداماً.

الدالة مع تعريفها
T at(size_t n) ترجع العنصر الموجود على الـ index الذي نمرره لها مكان الباراميتر n عند استدعائها.
ترمي الإستثناء out_of_range في حال كان الـ index المحدد فيها أصغر من 0 أو أكبر من عدد العناصر الموجودة.

معلومة: يمكنك استخدام العامل [] للوصول للعنصر و لكن عليك معرفة أن استخدام هذا العامل لا يرمي إستثناء في حال تمرير index غير موجود في الكائن.
bool empty() تستخدم لمعرفة ما إن كان الكائن الذي قام باستدعائها فارغاً أم لا.
ترجع false في حال كان يوجد فيه عنصر أو أكثر, و ترجع true إن لم يكن كذلك.
T front() ترجع قيمة أول عنصر موجود في الكائن الذي قام باستدعائها.
قد تسبب مشكلة في حال كان الكائن لا يملك أي عنصر, لذلك يفضل التأكد من أن الكائن غير فارغ باستخدام الدالة empty() قبل استخدامها.
T back() ترجع قيمة آخر عنصر موجود في الكائن الذي قام باستدعائها.
قد تسبب مشكلة في حال كان الكائن لا يملك أي عنصر, لذلك يفضل التأكد من أن الكائن غير فارغ باستخدام الدالة empty() قبل استخدامها.
void fill(T val) تستخدم لإعطاء قيمة لكل عنصر موجود الكائن الذي قام باستدعائها.
مكان الباراميتر val يجب أن تمرر قيمة من نفس نوع البيانات التي يمكن للكائن في الأساس أن يخزّنها.
size_t size() تستخدم للحصول على عدد عناصر الكائن الذي قام باستدعائها.
القيمة التي ترجعها هي نفسها القيمة التي نمررها مكان الباراميتر الثاني الذي نمرره عند إنشاء الكائن و الذي يمثل عدد عناصره.

معلومة: الفرق بين الدالة size() و العامل sizeof هو أن هذا الأخير يرجع حجم العناصر في الذاكرة بالوحدة Byte و ليس عددها.
void swap(array& anotherArray) تستخدم لتبديل قيم عناصر الكائن الذي قام باستدعائها بقيم عناصر الكائن الذي نمرره لها.
مكان الباراميتر anotherArray نمرر لها كائن من الكلاس array يملك نفس نوع و عدد عناصر الكائن الذي قام باستدعاء.

أمثلة شاملة حول التعامل مع الكلاس array

في كل مثال موضوع قمنا باستخدام دوال جديدة حتى تعرف كيف تستخدم جميع الدوال التي ذكرناها في الجدول.


في المثال التالي قمنا بتعريف كائن من array مع تحديد أنه يمكن أن يحتوي على 5 عناصر نوعها int.
بعدها قمنا بوضع 0 كقيمة أولية لجميع عناصره و ثم عرض جميع قيمه باستخدام حلقة.

ملاحظة: قمنا باستخدام العامل [] للوصول إلى العناصر و الدالة size() لمعرفة حجم المصفوفة.

المثال الأول

main.cpp
#include <iostream>
#include <array>

using namespace std;

int main()
{
	// int يمكنه أن يحتوي على 5 قيم نوعها array هنا قمنا بتعريف كائن من الكلاس
    array<int,5> myArray;

	// هنا قمنا بوضع القيمة 0 كقيمة أولية لجميع عناصره
    myArray.fill(0);
	
	// إلى 5 myArray هنا قمنا بتغير قيمة أول عنصر في الكائن
	myArray[0] = 5;
	
	// إلى 7 myArray هنا قمنا بتغير قيمة ثالث عنصر في الكائن
	myArray[2] = 7;

	// إلى 9 myArray هنا قمنا بتغير قيمة آخر عنصر في الكائن
	myArray[myArray.size()-1] = 9;

    cout << "Array values = ";

	// myArray هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيمة عنصر جديد من العناصر الموجودة في الكائن
    for(size_t i=0; i<myArray.size(); i++)
    {
        cout << myArray[i] << " ";
    }

    return 0;
}
		

سنحصل على النتيجة التالية عند التشغيل.

Array values = 5 0 7 0 9
		


في المثال التالي قمنا بتعريف كائن من array أدخلنا فيه 5 عناصر نصية.
بعدها قمنا بطباعة عدد عناصره و أول و آخر قيمة فيه.

ملاحظة: قمنا باستخدام الدالة empty() لمعرفة ما إن كانت المصفوفة فارغة أم لا, الدالة front() للحصول على قيمة أول عنصر و الدالة back() للحصول على قيمة آخر عنصر.

المثال الثاني

main.cpp
#include <iostream>
#include <array>

using namespace std;

int main()
{
	// بالإضافة إلى أننا قمنا بوضع قيم أولية في عناصره string يمكنه أن يحتوي على 5 قيم نوعها array هنا قمنا بتعريف كائن من الكلاس
    array<string,5> myArray = {"One", "Two", "Three", "Four", "Five"};

	// size() باستخدام الدالة myArray هنا قمنا بطباعة عدد عناصر الكائن
    cout << "Array size = " << myArray.size() << endl;
	
	// و إن لم يكن فارغاً سيتم طباعة أول و آخر قيمة فيه empty() باستخدام الدالة myArray هنا قمنا بالتشييك على عدد عناصر الكائن
	if (!myArray.empty())
	{
		cout << "Array first element value = " << myArray.front() << endl;
		cout << "Array last element value = " << myArray.back();
	}
	
    return 0;
}

		

سنحصل على النتيجة التالية عند التشغيل.

Array size = 5
Array first element value = One
Array last element value = Five
		


في المثال التالي قمنا بتعريف كائنين من array في كل منهما 4 عناصر من النوع نوعها int.
بعدها قمنا بتبديل عناصرهما و من ثم طباعة القيم التي أصبحت موجودة في كلٍّ منهما.

ملاحظة: قمنا باستخدام الدالة swap() لتبديل قيمهما و الدالة at() للوصول لقيم العناصر الموجودة فيهما.

المثال الثالث

main.cpp
#include <iostream>
#include <array>

using namespace std;

int main()
{
	// مع إعطاؤهما قيم أولية int يحتوي كل منهما على 4 عناصر نوعها array هنا قمنا بتعريف كائنين من الكلاس
    array<int,4> arr1 = {1, 2, 3, 4};
    array<int,4> arr2 = {5, 6, 7, 8};
	
	// arr2 مع قيم الكائن arr1 هنا قمنا بتبديل قيم الكائن
	arr1.swap(arr2);

    cout << "arr1 values = ";

	// arr1 هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيمة عنصر جديد من العناصر الموجودة في الكائن
    for(size_t i=0; i<arr1.size(); i++)
    {
        cout << arr1.at(i) << " ";
    }
	
    cout << "\narr2 values = ";

	// arr2 هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيمة عنصر جديد من العناصر الموجودة في الكائن
    for(size_t i=0; i<arr2.size(); i++)
    {
        cout << arr2.at(i) << " ";
    }

    return 0;
}
		

سنحصل على النتيجة التالية عند التشغيل.

arr1 values = 5 6 7 8
arr2 values = 1 2 3 4
		

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة