باستخدام std :: ifstream للتحميل في مجموعة من نوع بيانات الهيكل في ناقل STD ::
سؤال
أنا أعمل على محمل نقطية في 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)
. يحدد الاحتياط فقط قدرة كائن المتجه ولكن لا يخصص الذاكرة. تغيير الحجم سوف تخصيص الذاكرة بالفعل.
لا تنتمي إلى StackOverflow