سؤال

انا املك std::vector<unsigned char> m_vData;

m_vData.max_size() يعود دائما -1. لماذا سيحدث ذلك؟

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

المحلول

ربما لأنك تقوم بتعيينه لنوع موقّع قبل المشاهدة. عادة ما تكون قيمة الإرجاع لـ MAX_SIZE size_t وهو نوع غير موقّع. تحويل مستقيم ليقول int على العديد من المنصات سيعود -1.

جرب ما يلي بدلاً من ذلك

std::vector<unsigned char>::size_type v1 = myVector.max_size();

نصائح أخرى

لاحظ أن max_size() إرجاع أ vector::size_type وهو أمر غير موقّع ، لذا فأنت ترى رقمًا سالبًا بسبب تحويله إلى مكان ما (ستحصل حقًا على رقم كبير جدًا غير موقّع).

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

ليس عدد العناصر الموجودة في المتجه (أو مخصص حاليًا للمتجه). يمكنك الحصول على هذه الأرقام مع vector::size() أو vector::capacity().

لاحظ أنه على معظم المنصات ، std::vector<unsigned char>::max_size من المرجح أن يكون هو نفسه std::numeric_limits<unsigned int>::max(), ، وهو بالطبع -1 عند تحويله إلى int موقّع.

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