چرا iterator ورودی تابع با refrence گرفته نمیشه ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چرا iterator ورودی تابع با refrence گرفته نمیشه ؟

+2 امتیاز

دلیل این که تعریف std::sort به شکل زیر هست چیه ؟

template<class _RanIt> inline
	void sort(_RanIt _First, _RanIt _Last)

چرا iterator ها با refrence گرفته نشدن؟

template<class _RanIt> inline
	void sort(_RanIt& _First, _RanIt& _Last)

 

سوال شده مرداد 25, 1393  بوسیله ی رضا عاصفی (امتیاز 24)   1 3 3
دوباره تگ گذاری شد آبان 17, 1393 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز

چند تا دلیل داره 

 

۱ـ‌اگر iterator با ارجاع فرستاده بشه اگر داخل تابع عوض بشه بیرون از تابع هم عوض میشه پیش همیشه نیاز پیدا میشد یک کپی از iterator قبل از ارسال بگیرید .

 

۲ـ متغیر موقت رو نمیشه بصورت ارجاع به تابع فرستاد ( undefine behavior )‌ هست یعنی اگر به شکل دوم تعریف میشد  کد زیر اشتباه بود چون begin , end متغیر موقت return می کنن .

vector<int> a;
std::sort(a.begin(),a.end());//agar sort be shekl dovom bood in jomle eshtebah bood

 

۳ـ‌ چون اصولا iterator چیزی بجز یک اشاره گر یا یک struct خیلی سبک نیست کپی کردن با فرستادن با ارجاع از نظر زمان اجرایی تفاوتی نداره .

پاسخ داده شده مرداد 25, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...