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