با استفاده از 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 است و برای تعیین بازهٔ حذف باید از آن استفاده شود تا از فساد ایترِیتورها جلوگیری شود و عملکرد کارآمد بماند.

توسط پژوهشگر در 202 روز قبل ساعت 02:27
دسته بندی ها: C Plus Plus C Plus Plus for beginner
sara در 202 روز قبل ساعت 09:35

برای حذف دشمنان با 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 استفاده شود تا ایترِیتورها حفظ شده و کارایی بالا بماند.

گزارش

1 پاسخ

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

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