یک برنامه به زبان C++ بنویسید که موقعیت افقی (x) دشمنان را در یک std::vector ذخیره کند و با استفاده از iteratorها و std::vector::end تمام دشمنانی که x > 100 هستند را حذف کرده و تعداد دشمنان باقی‌مانده را چاپ کند.

2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:11

0.0

برای حل: از هدر و در صورت استفاده از الگوریتم‌های آماده از استفاده کنید. می‌توانید از روش امن حذف در حین پیمایش با iteratorها استفاده کنید (مثلاً با یک حلقه while که it != v.end() است و هنگام حذف از it = v.erase(it) استفاده کنید) یا روش کوتاه‌تر و کارآمدتر erase-remove idiom: v.erase(std::remove_if(v.begin(), v.end(), [](int x){ return x > 100; }), v.end()); توجه کنید که std::vector::end() یک iterator پس از آخرین عنصر است و نباید آن‌را دِریفرِنس کنید؛ برای lambdaها به کامپایلر با پشتیبانی C++11 یا بالاتر نیاز دارید. نکته عملی: در صورت دانستن تعداد تقریبی عناصر از reserve برای کاهش تخصیص حافظه استفاده کنید.

توسط پژوهشگر در 220 روز قبل ساعت 02:11
دسته بندی ها: C Plus Plus C Plus Plus for beginner
reyhaneh در 220 روز قبل ساعت 10:41

استفاده از erase-remove idiom برای حذف شرطی x > 100 هم امن‌تر و هم کوتاه‌تر از مدیریت دستی ایترترهاست. یادتان باشد end() یک ایتر پس از آخرین عنصر است و نباید آن را dereference کرد؛ همچنین برای استفاده از lambdaها به C++11 یا بالاتر نیاز دارید. اگر تعداد تقریبی عناصر را می‌دانید، با reserve اندازهٔ اولیه را مشخص کنید تا از تخصیص‌های مکرر جلوگیری شود. به‌عنوان گزینه‌های اجرایی، می‌توانید از erase(remove_if(...), end()) یا از حلقهٔ while با erase(iterator) استفاده کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری