با استفاده از std::vector::end در C++ یک تابع بنویس که دشمنانی با HP صفر را از بردار enemies حذف کند و تعداد حذفشدهها را برگرداند.
2.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:27 0.0
برای حل، از هدرهای و استفاده کنید و از الگوی erase-remove بهره ببرید: با std::remove_if و یک لامبدا که HP==0 را چک میکند تمامی موارد "حذفشونده" را به انتهای بردار منتقل کرده و سپس با فراخوانی enemies.erase(newEnd, enemies.end()) آنها را حذف کنید؛ تعداد حذفشده برابر تفاوت اندازهٔ قدیم و جدید بردار است. توجه کنید که end() اشارهگری past-the-end است و برای تعیین بازهٔ حذف باید از آن استفاده شود تا از فساد ایترِیتورها جلوگیری شود و عملکرد کارآمد بماند.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای حذف دشمنان با HP صفر از بردار enemies از الگوی erase-remove استفاده کن. ابتدا با std::remove_if و لامبدای HP==0، موارد حذفشونده را به انتهای بردار منتقل کن و مقدار newEnd را به دست آور. اندازهٔ قدیمی بردار را ذخیره کن و با removed = oldSize - std::distance(enemies.begin(), newEnd) تعداد حذفشدهها را محاسبه کن، سپس enemies.erase(newEnd, enemies.end()) را فراخوانی کن. توجه کن که end() یک اشارهگر past-the-end است و برای تعیین بازهٔ حذف باید از newEnd تا end استفاده شود تا ایترِیتورها حفظ شده و کارایی بالا بماند.
گزارش