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

[ تمت الإجابة ]ارسال مجموعة قيم لـ vector

مغلقمُجاب
بدأه هدف الشمالي في 4 يوليو 2012 · 5 رد · 694 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سؤالي عن ارسال مجموعة قيم لـ vector كيف يكون ؟ حاولت بطريقة قريبة من المصفوفات هكذا :

vector<int> in;
  in.insert{1,1,5};

ولكن لم أنجح

تم تعديل هذه المشاركة بواسطة هدف الشمالي في 4 يوليو 2012 في 00:48

#2

انظر هذا المثال :

#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;
}

راجع vector::insert - Standard C++ Library.

أرجو لك التوفيق.

1
#3

المثال نوعًا ما واضح ,ولكن السطر التالي لم يتضح :

v1.insert( v1.begin( )+1, v1.begin( )+2, v1.begin( )+4 );
#4 أفضل إجابة

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

  • الدالة 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);

إذا كان لديك أي سؤال آخر فلا تتردد في طرحه :)

أرجو لك التوفيق.

1
#5

+1

لكن هل يمكن إضافة القيم عند إنشاء الـ vector مثل المصفوفة هكذا :

int d[]={1,1,1,2};

الحقيقة مشكلتي مع المصفوفات أنه يبدو أن لها طول محدد وضاقت على مشروعي , فعند تطبيق درس للأخ مصطفى على الرابط :

/index.php?showtopic=263748

نجحت عند التطبيق على الملفات الصغيرة أما الملفات المتوسطة الحجم يحدث خطأ في البرنامج ،

فقلت أبحث عن مايقابل arraylist الموجود في java ووجدت أن أقرب شيء له هو الـvector ولكن يبدو أنه ليس مطلوبي , ولاأعرف ما الحل

#6
اقتباس
هل يمكن إضافة القيم عند إنشاء الـ vector مثل المصفوفة ؟

لا, استخدم at و insert لمثل هذا الأمر.

اقتباس
الحقيقة مشكلتي مع المصفوفات أنه يبدو أن لها طول محدد وضاقت على مشروعي , فعند تطبيق درس للأخ مصطفى على الرابط :

http://www.arabteam2...howtopic=263748

نجحت عند التطبيق على الملفات الصغيرة أما الملفات المتوسطة الحجم يحدث خطأ في البرنامج ،

فقلت أبحث عن مايقابل arraylist الموجود في java ووجدت أن أقرب شيء له هو الـvector ولكن يبدو أنه ليس مطلوبي , ولاأعرف ما الحل

يُمنع إدراج سؤالين في نفس الموضوع, السؤال الثاني لا علاقة له بالــ vector بشكل مباشر.

اكتب موضوعا جديدا و ضع به سؤالك و إن شاء الله ستجد المساعدة.

يُغلق الموضوع.

هذا الموضوع مغلق.

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