أمثلة شاملة حول التعامل مع الكلاس vector
في كل مثال موضوع قمنا باستخدام دوال جديدة حتى تعرف كيف تستخدم جميع الدوال التي ذكرناها في الجدول.
في المثال التالي قمنا بتعريف كائن من vector
مع تحديد أنه يمكن أن يحتوي على عناصر نوعها int
.
بعدها قمنا بإضافة 5 قيم فيه و من ثم عرض جميع قيمه باستخدام حلقة.
ملاحظة: قمنا باستخدام الدالة push_back()
لإضافة العناصر, الدالة size()
لمعرفة عدد العناصر التي تم إضافتها, العامل []
للوصول إلى العناصر.
المثال الأول
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// int يمكنه أن يحتوي على قيم نوعها vector هنا قمنا بتعريف كائن من الكلاس
vector<int> myVector;
// push_back() باستخدام الدالة myVector هنا قمنا بإضافة 5 عناصر في الكائن
myVector.push_back(1);
myVector.push_back(2);
myVector.push_back(3);
myVector.push_back(4);
myVector.push_back(5);
cout << "Vector values = ";
// myVector هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيمة عنصر جديد من العناصر الموجودة في الكائن
for(size_t i=0; i<myVector.size(); i++)
{
cout << myVector[i] << " ";
}
return 0;
}
سنحصل على النتيجة التالية عند التشغيل.
Vector values = 1 2 3 4 5
في المثال التالي قمنا بتعريف كائن من vector
أدخلنا فيه 5 عناصر نصية.
بعدها قمنا بإضافة 5 قيم فيه و من ثم عرض عدد جميع عناصره, عدد العناصر التي قام المترجم بتخصيص مساحة لها في الذاكرة في حال أردنا إضافة عناصر جديدة, عدد جميع العناصر التي يمكن إضافتها فيه, بالإضافة لأول و آخر قيمة موجودة فيه.
ملاحظة: قمنا باستخدام الدالة size()
لمعرفة عدد العناصر التي تم إضافتها, الدالة capacity()
لمعرفة عدد العناصر المخصصة حالياً للكائن في الذاكرة حتى لو لم يحتاج إليها, الدالة max_size()
لمعرفة أكبر عدد عناصر يمكن إضافتها فيه, الدالة empty()
لمعرفة ما إن كانت المصفوفة فارغة أم لا, الدالة front()
للحصول على قيمة أول عنصر و الدالة back()
للحصول على قيمة آخر عنصر.
المثال الثاني
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// string يمكنه أن يحتوي على 5 قيم نوعها vector هنا قمنا بتعريف كائن من الكلاس
vector<string> myVector;
// push_back() باستخدام الدالة myVector هنا قمنا بإضافة 5 عناصر في الكائن
myVector.push_back("One");
myVector.push_back("Two");
myVector.push_back("Three");
myVector.push_back("Four");
myVector.push_back("Five");
// size() باستخدام الدالة myVector هنا قمنا بطباعة عدد عناصر الكائن
cout << "Vector size = " << myVector.size() << endl;
// capacity() باستخدام الدالة myVector هنا قمنا بطباعة عدد العناصر التي تم تخصيص لها مساحة في الذاكرة حالياً من أجل الكائن
cout << "Vector capacity = " << myVector.capacity() << endl;
// max_size() باستخدام الدالة myVector هنا قمنا بطباعة عدد العناصر الأقصى التي يمكن تخزينها في الكائن
cout << "Vector max size = " << myVector.max_size() << endl;
// و إن لم يكن فارغاً سيتم طباعة أول و آخر قيمة فيه empty() باستخدام الدالة myVector هنا قمنا بالتشييك على عدد عناصر الكائن
if (!myVector.empty())
{
cout << "Vector first element value = " << myVector.front() << endl;
cout << "Vector last element value = " << myVector.back();
}
return 0;
}
سنحصل على النتيجة التالية عند التشغيل.
Vector size = 5
Vector capacity = 8
Vector max size = 576460752303423487
Vector first element value = One
Vector last element value = Five
في المثال التالي قمنا بتعريف كائن من vector
مخصص لتخزين قيم نوعها int
مع إضافة 9 قيم فيه عند تعريفه.
بعدها قمنا بحذف عدة عناصر منه بطرق مختلفة و من ثم طباعة قيم العناصر المتبقية.
ملاحظة: قمنا باستخدام الدالة pop_back()
لحذف آخر عنصر من الكائن, الدالة erase()
لحذف عنصر واحد, الدالة erase()
مرة ثانية لحذف أكثر من عنصر في وقت واحد و الدالة begin()
للحصول على عدّاد يمكن من خلاله تحديد مكان العناصر التي سيتم حذفها.
المثال الثالث
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// بالإضافة إلى أننا قمنا بإضافة 9 قيم فيه int يمكنه أن يحتوي على عناصر نوعها vector هنا قمنا بتعريف كائن من الكلاس
vector<int> myVector = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// myVector هنا قمنا بحذف آخر عنصر موجود في الكائن
// {1, 2, 3, 4, 5, 6, 7, 8} أصبح فيه القيم التالية myVector إذاً الكائن
myVector.pop_back();
// myVector يساوي 2 في الكائن index هنا قمنا بحذف العنصر الذي يملك
// {1, 2, 4, 5, 6, 7, 8} أصبح فيه القيم التالية myVector إذاً الكائن
myVector.erase(myVector.begin() + 2);
// يساوي 1 وصولاً إلى index إبتداءاً من العنصر الذي يملك myDeque هنا قمنا بحذف العناصر الموجودة في الكائن
// {1, 6, 7, 8} أصبح فيه القيم التالية myVector يساوي 4. و بالتالي الكائن index ما قبل العنصر الذي يملك
myVector.erase(myVector.begin() + 1, myVector.begin() + 4);
cout << "Vector values = ";
// myVector هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيمة عنصر جديد من العناصر الموجودة في الكائن
for(size_t i=0; i<myVector.size(); i++)
{
cout << myVector[i] << " ";
}
return 0;
}
سنحصل على النتيجة التالية عند التشغيل.
Vector values = 1 6 7 8
في المثال التالي قمنا بتعريف كائن من vector
مخصص لتخزين قيم نوعها int
مع إضافة 5 قيم فيه عند تعريفه.
بعدها قمنا بعرض جميع عناصره مرتين, مرة من أول عنصر لآخر عنصر, و مرة من آخر عنصر لأول عنصر.
ملاحظة: عند البدء من أول عنصر لآخر عنصر, قمنا باستخدام الدالة begin()
للحصول على عدّاد يمكن من خلاله البدئ من العنصر الأول و الدالة end()
للحصول على قيمة العدّاد التي من خلالها نعرف أننا وصلنا لآخر عنصر.
و عند البدء من آخر عنصر لأول عنصر, قمنا باستخدام الدالة rbegin()
للحصول على عدّاد يمكن من خلاله البدئ من آخر عنصر و الدالة rend()
للحصول على قيمة العدّاد التي من خلالها نعرف أننا وصلنا لأول عنصر بدون الحاجة لتغيير شكل الحلقة التي استخدمناها في المرة الأولى.
المثال الرابع
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// بالإضافة إلى أننا قمنا بإضافة 5 قيم فيه int يمكنه أن يحتوي على عناصر نوعها vector هنا قمنا بتعريف كائن من الكلاس
vector<int> myVector = {1, 2, 3, 4, 5};
cout << "Vector values from begin to end = ";
// إبتداءاً من أول عنصر وصولاً لآخر عنصر فيه myVector هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيمة عنصر جديد من العناصر الموجودة في الكائن
for(auto it=myVector.begin(); it<myVector.end(); it++)
{
cout << *it << " ";
}
cout << "\nVector values from end to begin = ";
// إبتداءاً من آخر عنصر وصولاً لأول عنصر فيه myVector هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيمة عنصر جديد من العناصر الموجودة في الكائن
for(auto it=myVector.rbegin(); it<myVector.rend(); it++)
{
cout << *it << " ";
}
return 0;
}
سنحصل على النتيجة التالية عند التشغيل.
Vector values from begin to end = 1 2 3 4 5
Vector values from end to begin = 5 4 3 2 1
في المثال التالي قمنا بتعريف كائن من vector
مع تحديد أنه يمكن أن يحتوي على عناصر نوعها int
.
بعدها قمنا بإضافة 5 قيم فيه, و من ثم عرض عدد جميع عناصره و عدد العناصر التي قام المترجم بتخصيص مساحة لها في الذاكرة في حال أردنا إضافة عناصر جديدة.
بعدها قمنا بالتخلي عن أي مساحة خصصها المترجم بشكل إفتراضي للكائن حتى يخزن قيم فيها إن إحتاجها.
في الأخير قمنا بإعادة عرض المعلومات السابقة للتأكد ما إن تم التخلي عن المساحة التي يستخدمها الكائن أم لا.
ملاحظة: قمنا باستخدام الدالة size()
لمعرفة عدد العناصر التي تم إضافتها, الدالة capacity()
لمعرفة عدد العناصر المخصصة حالياً للكائن في الذاكرة حتى لو لم يحتاج إليها و الدالة shrink_to_fit()
للتخلي عن أي مساحة في الذاكرة لم يحتاج إليها الكائن.
المثال الخامس
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// int يمكنه أن يحتوي على قيم نوعها vector هنا قمنا بتعريف كائن من الكلاس
vector<int> myVector;
// push_back() باستخدام الدالة myVector هنا قمنا بإضافة 5 عناصر في الكائن
myVector.push_back(1);
myVector.push_back(2);
myVector.push_back(3);
myVector.push_back(4);
myVector.push_back(5);
// size() باستخدام الدالة myVector هنا قمنا بطباعة عدد عناصر الكائن
cout << "Vector size = " << myVector.size() << endl;
// capacity() باستخدام الدالة myVector هنا قمنا بطباعة عدد العناصر التي تم تخصيص لها مساحة في الذاكرة حالياً من أجل الكائن
cout << "Vector capacity = " << myVector.capacity() << endl;
// myVector هنا قمنا بالتخلي عن أي مساحة إضافية حجزها المترجم بشكل تلقائي للكائن
myVector.shrink_to_fit();
cout << "\nAfter shrinking the vector\n\n";
// size() باستخدام الدالة myVector هنا قمنا بإعادة طباعة عدد عناصر الكائن
cout << "Vector size = " << myVector.size() << endl;
// capacity() باستخدام الدالة myVector هنا قمنا بإعادة طباعة عدد العناصر التي تم تخصيص لها مساحة في الذاكرة حالياً من أجل الكائن
cout << "Vector capacity = " << myVector.capacity() << endl;
return 0;
}
سنحصل على النتيجة التالية عند التشغيل.
Vector size = 5
Vector capacity = 8
After shrinking the vector
Vector size = 5
Vector capacity = 5
في المثال التالي قمنا بتعريف كائن من vector
مع تحديد أنه يمكن أن يحتوي على عناصر نوعها int
.
بعدها قمنا بإضافة 5 قيم فيه وراء بعضها.
بعدها قمنا بإضافة قيمة في مكان محدد فيه.
في الأخير قمنا بعرض جميع قيمه باستخدام حلقة.
ملاحظة: قمنا باستخدام الدالة insert()
لإضافة القيمة في مكان محدد في الكائن.
المثال السادس
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// بالإضافة إلى أننا قمنا بإضافة 5 قيم فيه int يمكنه أن يحتوي على عناصر نوعها vector هنا قمنا بتعريف كائن من الكلاس
vector<int> myVector = {1, 2, 3, 4, 5};
// myVector رقم 2 بالنسبة للكائن index هنا قمنا بإضافة القيمة 8 في الـ
// {1, 2, 8, 3, 4, 5} أصبح فيه القيم التالية myVector إذاً الكائن
myVector.insert(myVector.begin() + 2, 8);
cout << "Vector values = ";
// myVector هنا قمنا بإنشاء حلقة تقوم في كل دورة بطباعة قيمة عنصر جديد من العناصر الموجودة في الكائن
for(size_t i=0; i<myVector.size(); i++)
{
cout << myVector[i] << " ";
}
return 0;
}
سنحصل على النتيجة التالية عند التشغيل.
Vector values = 1 2 8 3 4 5