سوال ۸
علی یک struct سنگین به نام heavy تعریف کرده که در آن یک متغیر long long و ۳ متغیر double * و ۶ متغیر int و ۳ متغیر char و ۱۱ متغیر char * موجود است.
- فرض کنید
hیک متغیر از نوع اینstructاست. چگونه میتوانیم حجم اشغال شده توسطhرا (به بایت) پیدا کنیم؟ این مقدار چند است؟ - میدانیم
vectorهمیشهیک حافظهی داخلی پویا دارد که تعداد عناصر رزرو شدهی آن توانی از ۲ است. این اندازه با تابع داخلیcapacity()(نظیرcout « v.capacity() « endl;) قابل مشاهده است. میدانیم در صورتی کهv.size()برابر باv.capacity()باشد و عنصر جدیدی را بخواهیمpush_backکنیم، ابتدا یک آرایهی پویای جدید بهاندازهی دو براب ر آرایهی داخلی کنونی، درخواست (new) میشود. سپس عناصر موجود در آرایهی قبلی به نیمهی اوّل این آرایه نقلمکان میکنند. - اگر با شروع از یک
vector<heavy>خالی، ما ۲۰۰ شیء از ساختارheavyرا دانه دانه درvectorمان،push_backکنیم، تعداد متوسط نقلمکانهای هر عنصرvectorچندتا است؟ - اکنون فرض کنید میخواهیم عناصر این
vectorرا بر حسب مقدارِ تنها متغیرِlong longموجود در هر کدام از عناصر، بهصورت نزولی، مرتب کنیم. روش انجام این کار با استفادهی الزامی از تابعsortرا به همراه کدهای مربوطه بنویسید. - میدانیم تابع
sortدر هنگام مرتبسازی، بارها عناصر را بین اندیسهای مختلفvectorدوبهدو جابهجا (swap) میکند. این کار با توجه به حجم نسبتاً بالای هر عنصر از اینstruct، زمانبر است. با این وصف، چگونه میتوان سرعت انجام این عمل مرتبسازی را بهبود ببخشیم؟ (بهینهسازیهای بدیهی که ممکنست کامپایلر برای اُپتیمایز کردن انجام دهد، مدّ نظر نیستند.)