باستخدام std :: ifstream للتحميل في مجموعة من نوع بيانات الهيكل في ناقل STD ::

StackOverflow https://stackoverflow.com/questions/2820646

  •  26-09-2019
  •  | 
  •  

سؤال

أنا أعمل على محمل نقطية في C ++ ، وعند الانتقال من صفيف النمط C إلى ناقل STD :: لقد واجهت مشكلة معتادة لا يبدو أن Google لديها الإجابة.

8 بت و 4 بت ، تحتوي الخلفات على لوحة ألوان. تحتوي لوحة الألوان على مكونات زرقاء وخضراء وحمراء ومحفوظة لكل بايت في الحجم.

// Colour palette     
struct BGRQuad
{
     UInt8 blue; 
     UInt8 green; 
     UInt8 red; 
     UInt8 reserved; 
};

المشكلة التي أواجهها هي عندما أقوم بإنشاء متجه من بنية BgRquad ، لم يعد بإمكاني استخدام وظيفة قراءة ifstream لتحميل البيانات من الملف مباشرة إلى متجه BGRQUAD.

// This code throws an assert failure!
std::vector<BGRQuad> quads;
if (coloursUsed) // colour table available
{   // read in the colours
    quads.reserve(coloursUsed);
    inFile.read( reinterpret_cast<char*>(&quads[0]), coloursUsed * sizeof(BGRQuad) ); 
}

هل يعرف أي شخص كيفية القراءة مباشرة في المتجه دون الحاجة إلى إنشاء صفيف C ونسخ البيانات في متجه BGRQUAD؟

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

المحلول

تحتاج إلى استخدام quads.resize(coloursUsed) بدلاً من quads.reserve(coloursUsed). يحدد الاحتياط فقط قدرة كائن المتجه ولكن لا يخصص الذاكرة. تغيير الحجم سوف تخصيص الذاكرة بالفعل.

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