سؤال

وأنا يمر بلدي متجه إلى وظيفة التي تتوقع مجموعة ج. تقوم بإرجاع كمية البيانات ملأ (على غرار fread). هل هناك طريقة استطيع ان اقول بلدي ناقلات لتغيير حجمه ليشمل المبلغ الذي وظيفة مرت في؟

وبالطبع أتأكد متجه لديه القدرة () لعقد هذا المبلغ من البيانات.

هل كانت مفيدة؟

المحلول

لا، ليس هناك طريقة معتمدة ل"توسيع" ناقلات بحيث يحتوي على القيم الإضافية التي تم نسخها مباشرة في. الاعتماد على "القدرة" على تخصيص ذاكرة غير الحجم التي يمكن أن تكتب لهي بالتأكيد ليست شيئا يجب عليك الاعتماد عليها.

ويجب ضمان ناقلات الخاص بك لديه المبلغ المطلوب من الفضاء عن طريق تغيير حجم قبل استدعاء الدالة ثم تغيير حجم إلى القيمة الصحيحة بعد ذلك. منها مثلا.

vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);

نصائح أخرى

وcapacity يخبرك فقط مقدار الذاكرة المحجوزة، ولكنها ليست في حجم ناقلات.

ما يجب عليك فعله هو تغيير حجم إلى الحد الأقصى الحجم المطلوب أولا:

vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);

وهم ..
vector.resize(size);

والأمراض المنقولة جنسيا :: ناقلات لديه طريقة تغيير حجم () مع الحجم الجديد كمعلمة به. هكذا ببساطة واصفا إياه مع عدد إرجاعها بواسطة الدالة يجب أن يكون على ما يرام.

وربما تكون std::back_inserter ما تحتاجه. وبافتراض وظيفة الإدخال غير قادرة على العمل مع مكرر، تمر عليه std::back_inserter(myvector). وهذا push_back كل ما هو مكتوب على مكرر، وضمنا تغيير حجم ناقلات عند الضرورة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top