Data Structure & STL (Part 3)


تحدثنا في مقالنا السابق عن Data Structure & STL (Part 2) ، والأن سنكمل حديثنا عن Data Structure & STL (Part 3) .

1-   Deque (الرتل ثنائي الطرف):
يشبه ال Queue و لكنه يتيح الحذف و الإضافة من الجهتين .
و فيما يلي جدول يوضح التوابع التي تتعامل مع ال Deque :

قبل استخدام الdeque  علينا أولا ان نقوم بتضمين المكتبة <deque> .
Function
Description
Begin()
يعيد هذا التابع Iterator على العنصر الأول
End()
يعبد هذا التابع Iterator على العنصر ما بعد الأخير
Front()
يمكنك هذا التابع من الوصول الى العنصر الأول
Back()
يمكنك هذا التابع من الوصول الى العنصر الأخير
Push_back()
إضافة عنصر في الطرف الخلفي
Pop_back()
حذف عنصر من الطرف الخلفي
Push_front()
إضافة عنصر في الطرف الأمامي
Pop_fornt()
حذف عنصر من الطرف الأمامي
Erase(a)
لحذف عنصر ، a : هو iteratorعلى العنصر المراد حذفه
Erase(a,b)
لحذف مجال ، a,b : هي iterator عل بداية ونهاية المجال
Insert(it,x)
إضافة عنصر (it : iterator الى العنصر المراد إضافة قيمة x قبله ،و x القيمة المراد اضافتها )
Insert(it,n,x)
إضافة n عنصر (it : iterator الى العنصر المراد إضافة قيمة x قبله ،و x القيمة المراد اضافتها ،و n عدد مرات اضافته )
Insert(it,begain,end)
إضافة مجموعة عناصر (it: iterator على العنصر المراد إضافة مجموعة قبله و begin هو iterator على مصفوفة يمثل بداية المجال المراد إضافته و end  تمثل نهاية المجال)
Clear()
حذف جميع عناصر ال container
Size()
يعيد عدد العناصر الموجودة في container

مثال :
#include<iostream>
#include<deque>
using namespace std;
int main ()
{
    deque <int> Dq;
    for (int I =5; I > 0; i--)
        Dq.push_back(i);
    for (int i=0; i<5; i++)
        cout<<Dq[i]<<" ";
    cout<<endl;
    for (deque<int>:: iterator it=Dq.begin(); it! =Dq.end (); ++it)
        cout<<*it<<" ";
    cout<<endl;
deque <int>: iterator it =Dq.begin();
Dq. insert(it,6);
for (deque<int>: :iterator it=Dq.begin(); it! = Dq.end (); ++it)
    cout<<*it<<" ";
cout<<endl;
deque<int> dq1(3,300);
for (deque<int>:: iterator it= dq1.begin(); it! =dq1.end (); ++it)
    cout<<*it<<" ";
cout<<endl;
dq1.swap(Dq);
for (deque<int>:: iterator it=dq1.begin();it!=dq1.end();++it)
cout<<*it<<" ";
cout<<endl;
for (deque<int>::iterator it=Dq.begin();it!=Dq.end();++it)
cout<<*it<<" ";
cout<<endl;

}

تنفيذ البرنامج :

الشكل التالي يوضح الية عمل المكدس في مثالنا السابق :

2-   Vector:
هو عبارة عن مصفوفة أحادية البعد .
يعرف باشكل التالي :
Vector <type> name (size, initial_value);

Type: نوع عناصر ال Vector (int, double, char….  ) و ممكن ان يكون containr مثل (vector , string ,map) .
Name: اسم vector.
Size: حجم الفيكتور.
Initial Value: قيمة ابتدائية لعناصر ال vector.
Vector<Type> Name (size);

و يمكن تمرير مصفوفة في Vector  من خلال  تمرير عنوان اول عنصر في المصفوفة و عنوان اخر عنصر :
Vector<Type>name (array, array+5);

قبل استخدام الVector علينا أولا ان نقوم بتضمين المكتبة <vector> .
و فيما يلي جدول يوضح التوابع التي تتعامل مع ال vector :
Function
Description
Push_back()
(void)لإضافة عنصر الى نهاية ال Vector
Pop_back()
(void)لحذف عنصر من نهاية ال Vector
Back()
يرد قيمة آخر عنصر في  ال Vector
Front()
يرد قيمة اول عنصر في ال Vector
Vector.erase(iterator Start,iterator end)
(void)يقوم بحذف عناصر من الموقع Start  في الvector  الى الموقع end-1

مثال :

#include<iostream>
#include<vector>
using namespace std;
int main ()
{
    int a[]={1,2,3,4,5,6};
    vector<int> v(a,a+6);
    v.push_back(7);
    for (int i=0; i<v. size (); i++)
        cout<<v[i]<<" ";
    v.pop_back ();
    cout<<endl<<v. back () <<endl;
    v.erase (v. begin () +1, v. begin () +3);
    vector<int>::iterator t= v. begin ();
    while (t! =v.end ())
    {
    cout<<(*t) <<" ";
    t++;
    }
    v.clear ();
    cout<<endl<<"size = "<<v. size () <<endl;
}
  تنفيذ البرنامج :

الشكل التالي يوضح الية عمل الرتل في برنامجنا :



لمعلومات الكثر عن Deque  من هنا
لمعلومات اكثر عن  Vector من هنا
Data Structure & STL (Part 3) Data Structure & STL (Part 3) بواسطة habeeb on 13:38:00 Rating: 5

No comments

مدون محترف