المصفوفات الديناميكية: متجه


المتجهات في C ++ ( المتجه )
أحد أنواع المصفوفات الديناميكية في C ++ هو vector ( vector) . & nbsp؛
نبسب ؛
Vector ( vector ) & nbsp؛ & mdash؛ إنه هيكل بيانات يمثل بالفعل نموذجًا لصفيف ديناميكي.
لا تحتوي المصفوفات العادية في C ++ على أي وظائف وطرق خاصة للعمل معها. & nbsp ؛ المتجهات في C ++ هي هياكل بيانات تحتوي على المزيد من الوظائف الإضافية للعمل مع العناصر.
نبسب ؛
إنشاء متجه # تضمين العلامة & lt ؛ ناقل & GT. ... انت مين() { // إعلان متجه عدد صحيح v لعشرة عناصر نبسب ؛ ناقل العلامة & lt ؛ int & GT. ت (10) ؛ نبسب ؛ نبسب ؛ // نفس القيم الأولية الصفرية (المتجه v1) نبسب ؛ ناقل العلامة & lt ؛ int & GT. الإصدار 1 (10 ، 0) ؛ ... نبسب ؛
حشوة متجهة الطريقة الأولى
نخصص ذاكرة لعدد العناصر n ونملأها بقراءتها من لوحة المفاتيح.
نبسب ؛ إنتن. سينما & GT ؛ & GT. ن؛ المتجه a (n) ؛ لـ (int i = 0 ؛ i & lt ؛ n ؛ i ++) سينما & GT ؛ & GT. أ [i] ؛
الطريقة الثانية
الطريقة الثانية مطلوبة عندما يكون عدد العناصر غير معروف. أولاً ، يتم إنشاء متجه فارغ ، ثم باستخدام طريقة push_back () ، يتم إضافة عنصر جديد & nbsp ؛ إلى نهاية المتجه.
نبسب ؛ إنتن. سينما & GT ؛ & GT. ن؛ ناقلات أ ؛ لـ (int i = 0؛ i & lt؛ n؛ i ++) { إنتب. سينما & GT ؛ & GT. ب؛ a.push_back (ب) ؛ }
حجم المتجه int b = a.size () ؛

التكرارات إحدى الطرق للتكرار على العناصر في الحاويات (هياكل البيانات) هي مكرر ( مكرر ) ، & nbsp؛ والتي تأتي في عدة أنواع.
نبسب ؛
Iterator & nbsp؛ - & nbsp؛ بنية البيانات التي تشير إلى & raquo ؛ في بعض عناصر الحاوية ، ويمكن (بالنسبة لبعض الحاويات) الانتقال إلى العنصر السابق / التالي.
يستخدم المتجه أقوى - & nbsp؛ مكرر الوصول العشوائي ( مكرر الوصول العشوائي ). & nbsp؛ يمكن لمكرر الوصول العشوائي الوصول إلى عنصر تعسفي للمتجه بالإضافة إلى الحركة المتسلسلة.

فوائد التكرارات
1) نبسب ؛ عند حذف العناصر والتكرار فوق العناصر باستخدام المؤشرات ( [] ) ، نحتاج إلى تتبع عدد العناصر المتبقية طوال الوقت حتى لا نتجاوز المتجه ، وباستخدام مكرر ، يمكن استخدام end () للإشارة إلى نهاية المتجه.
2) باستخدام مكرر ، يمكنك بسهولة إزالة العناصر وإدراجها في متجه ديناميكيًا. & nbsp ؛
نبسب ؛
إعلان التكرار 1) إعلان مكرر لمتجه عدد صحيح وتوجيهه إلى عنصر الأول في المتجه. ناقل العلامة & lt ؛ int & GT. myvector = {1، 2، 3، 4، 5} ؛ متجه & lt؛ int & gt؛ :: iterator it = myvector.begin ()؛
2) تعريف & nbsp؛ مكرر لمتجه عدد صحيح وتوجيهه إلى عنصر & nbsp؛ بعد last & nbsp؛ في المتجه. ناقل العلامة & lt ؛ int & GT. myvector = {1، 2، 3، 4، 5} ؛ متجه & lt؛ int & gt؛ :: iterator it = myvector.end ()؛ // يشير إلى العنصر بعد آخر عنصر ، متجه & lt؛ int & gt؛ :: iterator it1 = myvector.end () - 1 ؛ // مشيرا إلى العنصر الأخير. نبسب ؛
الحصول على قيمة وعرضها الحصول على العنصر المشار إليه بواسطة المكرر وعرضه. كوت & lt؛ & lt؛ * ذلك ؛ نبسب ؛
تحريك موضع المكرر حرك موضع المكرر 3 مواضع للأمام. <قبل> تقدم (ذلك ، 3) ؛ نبسب ؛
إنشاء مكرر جديد من مكرر موجود أنشئ مكررًا جديدًا استنادًا إلى واحد موجود ، مع تقدم 3 وظائف. auto it1 = next (it، 3)؛ نبسب ؛
عرض قيم المتجه باستخدام مكرر متجه & lt؛ int & gt؛ :: iterator it؛ لـ (it = myvector.begin () ؛ it! = myvector.end () ؛ ++ هو) { نبسب ؛ cout & lt؛ & lt؛ * it & lt؛ & lt؛ & quot؛ & quot ؛؛ ونبسب ؛}
اجتياز المتجه لاجتياز المتجه من العنصر الأخير إلى الأول ، يتم استخدام مكرر عكسي & nbsp ؛ reverse_iterator ، يتم الحصول عليه بواسطة:
1) rbegin () - & nbsp؛ إرجاع مكرر عكسي يشير إلى العنصر الأخير من المتجه ، يؤدي تطبيق العملية ++ إلى الانتقال إلى العنصر السابق ؛
2) rend () - & nbsp؛ & nbsp؛ إرجاع مكرر عكسي يشير إلى العنصر السابق للمتجه ، يؤدي تطبيق عملية ++ إلى الانتقال & nbsp؛ في اليوم التالي. متجه & lt ؛ int & gt ؛ :: reverse_iterator it = myvector.rbegin () ؛ & نبسب ؛ // يشير إلى العنصر الأخير متجه & lt ؛ int & gt ؛ :: reverse_iterator it = myvector.rend () ؛ نبسب ؛ & nbsp ؛ // يشير إلى عنصر ، نبسب ؛ // الذي يأتي قبل الأول ،