مكتبة القوالب المعيارية Vector في لغة ++C

اقرأ في هذا المقال


ما هي حاوية Vector في لغة ++C؟

(Vectors) نفسها المصفوفات الديناميكية، و هي حاويات تسلسلية قادرة على تغيير حجمها تلقائيًا عند إدراج عنصر أو حذفه، وقادرة أيضاً على معالجة التخزين تلقائيًا بواسطة حاوية (Vector) نفسها، وتماما مثل المصفوفات، فإن (Vector) يُخزن العناصر بمواقع ذاكرة متجاورة، مما يعني أنه يمكن الوصول إلى عناصرها باستخدام المؤشرات (pointers)، وبكفاءة كما هو الحال في المصفوفات.

ويتم إدخال البيانات في النهاية، ويستغرق الإدخال في النهاية أوقاتًا مختلفًة، فقد تكون هناك حاجة أحيانًا لتوسيع المصفوفة، بينما يستغرق إزالة العنصر الأخير وقتًا ثابتًا؛ لأنه لا يحدث تغيير في الحجم، ويعد الإدخال والمسح في البداية أو في المنتصف خطيًا في الوقت أي “(n)O”.

أهم الدوال في حاوية Vector:

الدالةاستخدامهاتعقيد الوقت
1- (Val)push_backإضافة عنصر جديد في نهاية (vector)، يؤدي هذا إلى زيادة حجم الحاوية بمقدار واحد. وإذا تجاوز عدد العناصر في (vector) عن السعة الحالية، فإنه يؤدي إلى توسيع حجم التخزين تلقائيًا.

(1)O

في حالة حدوث توسيع في (vector)، فإن التوسيع نفسه: (n)O

2- ()pop_backيزيل العنصر الأخير في (vector)، مما يقلل حجم الحاوية بمقدار واحد. (1)O
4- ()beginيُرجع مؤشر (Pointer)، يشير إلى موقع أول عنصر في (vector)، وتستطيع من خلاله التنقل عبر محتويات (vector).(1)O
5- ()endيُرجع مؤشر يشير إلى موقع الذي يلي العنصر الأخير في (vector)، بالتالي لا يشير إلى أي عنصر في (vector).(1)O
6- ()rbeginيُرجع مؤشر (Pointer)، يشير إلى موقع أخر عنصر في (vector)، ويعني (reverse begin) أي بداية عكسية.(1)O
7- ()rendيُرجع مؤشر يشير إلى موقع الذي يسبق العنصر الأول في (vector)، بالتالي لا يشير إلى أي عنصر في (vector)، ويعني (reverse end) أي نهاية عكسية.(1)O
8- ()sizeإرجاع عدد العناصر الفعلي في (vector).(1)O
9- (n, Val)resize

يغير حجم الحاوية إلى الحجم (n)، فإذا كان (n) أصغر من حجم الحاوية الحالي، يتم تقليل المحتوى إلى أول (n) من العناصر، وإزالة العناصر المُتبقية.، أما إذا كان (n) أكبر من حجم الحاوية الحالي، فسيتم توسيع المحتوى إلى حجم (n).

وفي حال كان (Val) محددة (تستطيع ألا تحدده)، فإنه سيتم إدراج نُسخ منها لباقي العناصر، حسب الحاجة، للوصول إلى حجم (n).

 O(n)
10- ()emptyتختبر ما إذا كان الحاوية فارغة أم لا، فإذا كانت الحاوية فارغة (أي ما إذا كان حجمه 0)، تُرجع (true) غير ذلك (false).(1)O
11- ()max_sizeيرجع الحد الأقصى لعدد العناصر التي يمكن أن يحويها (vector).(1)O
12- (x)swapيتبادل محتوى (vector) الذي تم الاستدعاء به بمحتويات (x)، وهي (vector) أخرى.(1)O

13- (position)erase

erase(first, last)

يزيل عنصر من (vector) أو، سلسلة عناصر.

إذا أردته أن تزيل عنصر فإنك تضع موقع العنصر المراد حذفه، وأردت أن تزيل سلسلة محددة من العناصر فإنك تضع موقع العنصر الأول المراد حذفه، وموقع العنصر الأخير

(n)O
14- ()clearمسح جميع العناصر داخل (vector).(n)O

دوال للوصول لعنصر محدد:

[n]كما المصفوفة، فإنها ترجع محتوى المصفوفة في الموقع (n) في (vector).
()frontيرجع أول عنصر في (vector).
()backيرجع أخر عنصر في (vector).

تطبيق على حاوية vector:

ديفيد عالق في مستوى الذي يلعبه الآن، للمضي قدمًا في اللعبة، عليه أن يهزم جميع التنانين التي تعيش على هذا المستوى. لدى ديفيد والتنين قوة يتم تمثيلها بعدد صحيح، في المبارزة بين خصمين، يتم تحديد نتيجة المبارزة من خلال قوتهم. في البداية، قوة ديفيد تساوي (s)، إذا بدأ ديفيد في المبارزة مع التنين (i) ، ولم تكن قوة ديفيد أكبر من قوة التنين xi ، فإن ديفيد يخسر المبارزة ويموت، ولكن إذا كانت قوة ديفيد أكبر من قوة التنين، فإنه يهزم التنين ويحصل على زيادة في القوة الإضافية بمقدار (yi).

يمكن لـ ديفيد محاربة التنانين بأي ترتيب. حدد ما إذا كان بإمكانه الانتقال إلى المستوى التالي من اللعبة، أي هزيمة جميع التنانين دون خسارة واحدة.

المدخلات:

يحتوي السطر الأول على عددين صحيحين مفصولين بمسافات، الأول (s) وهي قوة ديفيد، الثاني (n) هو عدد التنانين، حيث (s ≤ 104 ، 1 ≤ n ≤ 103)، ثم يتبعه ب (n) من الأسطر، يحتوي كل سطر على على عددين صحيحين مفصولين بمسافات (xi) قوة التنين و(yi) والمكافأة لهزيمته، حيث أن (xi ≤ 104، yi ≤ 104).

المخرجات:

على سطر واحد ، اطبع “YES” (بدون علامات الاقتباس)، إذا كان بإمكان ديفيد الانتقال إلى المستوى التالي، وطباعة “NO” (بدون علامات الاقتباس)، إذا لم يتمكن من ذلك.

مثال:

المدخلات:

2 2
1 99
100 0

المخرجات:

YES

الحل:

Screenshot-2021-02-21-195816

المصدر: Vector in C++ STLC++ Vector Library - resize() Functionstd::vectorVECTOR Container in STL


شارك المقالة: