با استفاده از iteratorها و هدر <iterator> یک تابع در C++ بنویسید که یک std::vector<double> نشاندهنده شدت میدان در یک شبکهٔ محاسباتی را دریافت کند، تمام مقادیر منفی را صفر کند و مجموع نهایی را برگرداند.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:13 0.0
برای حل این مسئله هدرهای و (و برای جمع زدن میتوانید را هم اضافه کنید) را وارد کنید. با استفاده از std::begin و std::end یا از نوع iterator متعلق به وکتور، از ابتدا تا انتها پیمایش کنید، با dereference کردن iterator مقدارها را بررسی و اگر منفی بودند آنها را برابر صفر قرار دهید، سپس یا در همان حلقه جمع جزئی بگیرید یا پس از اصلاح از std::accumulate برای محاسبه مجموع استفاده کنید. نکات: از auto برای نگهداری نوع iterator استفاده کنید تا کد سادهتر باشد، تغییر در محل (in-place) کارآمد است (پیچیدگی O(n)) و به دقت اعشاری هنگام جمع اعداد اعشاری توجه کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکتهٔ اصلی این کار، پیمایش با اینتریترها بهصورت در-جا از ابتدای vector تا انتها است تا مقادیر منفی را صفر کرده و جمع را بهروز رسانی کنید (پیچیدگی O(n)). میتوان از std::begin و std::end یا اینتریتر مربوط به vector استفاده کرد و با auto نگه داشتن نوع اینتِریتر، کد را سادهتر کرد. برای دقتِ عددیِ جمع، خوب است از long double استفاده کنید یا مقدار اولیهٔ مناسبی در std::accumulate تعیین نمایید تا خطای گرد شدن کمتر شود. همچنین انجامِ تغییر در محل باعث کارایی بهتر میشود و نیازی به تخصیص حافظهٔ اضافی نخواهد بود.
گزارش