الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]شرح تفصيلي لـ Vector

بدأه المشاكـس5550 في 25 نوفمبر 2012 · 3 رد · 969 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اني أبحث عن هيكل بيانات 'في السي ++' تماما مثل الـ ArrayList في الجافا ، كل مرة نستطيع اضافة عنصر جديد اليها 'بدون ما نكتب حجم الـهيكل'

+ بالاضافة الى امكانية الترتيب تصاعديا وتنازليا

في الجافا ، نستعمل sort & Collection & reverseOrder على الـ ArrayList ... اما بالنسبة للسي ++ فلا أدري :blush:

----------

لقد فكرت في ترتيب العناصر تصاعديا بمجرد ملأ هيكل البيانات ....

ليس لدي ادنى خبرة في السي++ .... ^_^*

----------

:happy:

شكرا الكم

556891961.gif

I am learning from you

it is the programmer eye

#2

تبحث عن vector

http://en.cppreference.com/w/cpp/container/vector

و sort

http://en.cppreference.com/w/cpp/algorithm/sort

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

مثال على الــ Vector :

#include <vector>
#include <iostream>

int main( )
{
   using namespace std;   
   vector <int> v1;
   vector <int>::iterator Iter;

   v1.push_back( 10 );
   v1.push_back( 20 );
   v1.push_back( 30 );

   cout << "v1 =" ;
   for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )
      cout << " " << *Iter;
   cout << endl;

   v1.insert( v1.begin( ) + 1, 40 );
   cout << "v1 =";
   for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )
      cout << " " << *Iter;
   cout << endl;
   v1.insert( v1.begin( ) + 2, 4, 50 );

   cout << "v1 =";
   for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )
      cout << " " << *Iter;
   cout << endl;

   v1.insert( v1.begin( )+1, v1.begin( )+2, v1.begin( )+4 );
   cout << "v1 =";
   for (Iter = v1.begin( ); Iter != v1.end( ); Iter++ )
      cout << " " << *Iter;
   cout << endl;
}

لكي تفهم الكود ستحتاج إلى معرفة بسيطة لبعض الدوال المُستخدمة مع الفكتور :)

  • الدالة push_back تستقبل عنصرا و تضعه في نهاية الفكتور.
  • الدالة begin تعيد iterator يشير إلى أول عنصر في الفكتور.
  • الدالة end تُعيد iterator يُشير إلعنصر القبل الأخير في الفكتور.
  • الدالة insert تقوم بإدراج مجموعة من العناصر داخل الفكتور.
  • و هناك دوال آخرى قد تحتاجها مثل assign, at, back, clear, empty, max_size, resize, size ...

انظر المثال :

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    typedef vector<int> vi;
    // إنشاء فكتور يحوي 10 خانات
    vi v(10);
    // تغيير بعض عناصر الفكتور
    v.at(2) = 2;
    v.at(5) = 7;
    // تمديد الفكتور
    v.resize(11);
    v.at(10) = 5;
    // إضافة عنصر إلى نهاية الفكتور
    v.push_back(13);
    // إظهار عناصر الفكتور
    for (int i=0; i<v.size(); ++i)
    {
        cout << v << endl;
    }
    return 0;
}

بالنسبة للدالة insert فلها ثلاث صيغ :

الصيغة الأولى : الوسيط الأول عبارة عن iterator يُحدد المكان الذي سيتم فيه وضع العنصر x. في هذه الحالة ستعيد الدالة, iterator جديد يشير إلى آخر عنصر تمت إضافته إلى الفكتور.

iterator insert(iterator i, value_type x)

الصيغة الثانية : تُضيف n نسخة من الوسيط الثالث قبل العنصر الذي يُشير إليه المؤشر i.

void insert(iterator i, size_type n, value_type valeur)

انظر المثال :

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<float> v(5);
    int i = 0;
    while(i < v.size())
         v.at(i++) = i;
    v.insert( v.begin( ) + 5, 3, 8.0312 );
    for (i=0; i<v.size(); ++i)
         cout << v << endl;
    return 0;
}

الصيغة الثالثة : تُضيف جميع عناصر الفكتور الواقعة في المجال [first, last], الإضافة ستكون بعد العنصر الذي يُشير إليه المؤشر position.

void insert(iterator position, const_iterator first, const_iterator last);
2
#4

كما ذكر الأستاذ أحمد يوسف, كل ما تحتاج إليه هو الدوال الموجودة في المكتبة algorithm التي تُوفر دوال جاهزة لمعظم الخوارزميات المعروفة ..

انظر المثال التالي :

إيجاد جميع الإحتمالات الممكنة لحروف كلمة معينة

2

مواضيع مشابهة