البرمجة

كيفية تحديد حجم vector بمتغير في C++

عند استخدام std::vector في C++، يجب تحديد حجم الvector في وقت التهيئة. في المثال الذي قدمته، تحاول إنشاء مصفوفة من الـ vectors بحجم يعتمد على قيمة متغير num_ports التي تم تعريفها باستخدام const int وهذا يعتبر قيمة ثابتة لا يمكن تغييرها.

لحل هذه المشكلة، يمكنك استخدام المثود resize لتعيين حجم الvector بعد إنشائه، كما في المثال التالي:

cpp
#include #include #include int main() { std::vector<char> Ports = {'+', '-', '+', '-', '+'}; size_t ports_specified = std::count(Ports.begin(), Ports.end(), '+'); const int num_ports = static_cast<int>(ports_specified); std::vector port_info; port_info.resize(num_ports); // يمكنك الآن استخدام port_info بحيث تكون حجمها محدداً بقيمة num_ports std::cout << "Size of port_info: " << port_info.size() << std::endl; return 0; }

هذا التعديل يسمح لك بإنشاء vector بحجم يعتمد على قيمة متغير num_ports.

المزيد من المعلومات

بالتأكيد! عند استخدام resize لتغيير حجم vector، يجب مراعاة أنه إذا تم تكبير الحجم، ستتم إضافة قيم فارغة إلى الvector. وإذا تم تصغير الحجم، سيتم حذف العناصر الإضافية من النهاية. لذا، يُفضل استخدام resize مع حذر لتجنب فقدان البيانات.

كما يمكنك استخدام الدالة reserve بدلاً من resize إذا كنت تعرف الحجم المقدر للvector مسبقًا وتريد تخصيص الذاكرة اللازمة له دون إضافة قيم فارغة، كما في المثال التالي:

cpp
#include #include #include int main() { std::vector<char> Ports = {'+', '-', '+', '-', '+'}; size_t ports_specified = std::count(Ports.begin(), Ports.end(), '+'); const int num_ports = static_cast<int>(ports_specified); std::vector port_info; port_info.reserve(num_ports); // يمكنك الآن استخدام port_info بحيث تكون الذاكرة مخصصة لها ولكن لا تحتوي على أي قيم فارغة بعد تكبير حجمها std::cout << "Capacity of port_info: " << port_info.capacity() << std::endl; return 0; }

هذا يجعل الvector جاهزًا لاستيعاب num_ports قيمة دون الحاجة لإضافة قيم فارغة.

زر الذهاب إلى الأعلى