str.begin() , str.end چیست؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۲۰۵ نفر آنلاین
۶۴ عضو و ۱۴۱ مهمان در سایت حاضرند

str.begin() , str.end چیست؟

0 امتیاز

دوستان کار این توابع str.begin() و str.end() چیه؟ و کجا استفاده میشه ؟ و چجوری باید بکار ببریم؟

فهمیدنش یکم گنگه.اینم لینکش:

http://www.cplusplus.com/reference/string/string/begin/

یا مثلا توضیح این چند خط کد :

 #include <string>
 int main ()
{
  std::string str="to be question";
    std::string::iterator it;
it = str.insert(str.begin()+5,','); 
str.insert (str.end(),3,'.'); 
}

فقط یطوری بگید ما تازه کارها هم بفهمیم.

 

با تشکر فراوان.

 

سوال شده اسفند 2, 1393  بوسیله ی hosseinam1370 (امتیاز 163)   8 22 34
ویرایش شده اسفند 2, 1393 بوسیله ی hosseinam1370

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

یکی از pattern های معروف در design pattern در واقع iterator هستش که در واقع از طریق آنها شما قادرید انواع container ها را پیمایش کنید هم به صورت forward و هم به صورت revert تعریف میشن.در واقع iterator ها به صورت یک اشاره گر هستند که به محلی از container اشاره می کنند. برای تعریف یک iterator برای vector از نوع به صورت زیر عمل می کنیم.

using VecIt = vector<int>::iterator

شما با استفاده از operator ++ و -- می تونید موقعیت iterator خود را به عناصر بعدی و قبلی در container حرکت بدید.

به طور مثال شما قصد دارید کل یک vector را پیمایش کنید  و کلیه عناصر آن را نمایش بدید .شما باید از ابتدای وکتور تا انتها آن حرکت کنید و در هر مرحله محلی که iterator به آن اشاره می کنه را چاپ کنید.iterator را به ابتدای لیست انتقال بدید و سپس هر بار آن را افزایش بدید تا به خانه ها بعدی اشاره کنه و در هر مرحله آن را با موقعیت خانه ی آخر مقایسه کنید.

vector<int> vec = {1,2,3,4,5};
for (vector<int>::iterator it = vec.begin();it != vec.end();it++)
  cout << *it << endl;

 

 

پاسخ داده شده اسفند 2, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد اسفند 2, 1393 بوسیله ی hosseinam1370
ممنون.
حالا از این iterator کجا ها استفاده میشه؟
مثلا خیلی راحت میشه یه string رو داخل [ ] گذاشت (مثلا str[ i ]      l  ) و تو یه حلقه i رو دونه دونه افزایش بدیم و تمامی کاراکتر ها رو دونه دونه تو خروجی نشون بدیم.که مثل همین کار میکنه.

با تشکر.
به طور مثال شما نیاز دارید یک vector را به صورت موازی مرتب کنید شما یک متد مرتب سازی دارید که این متد iterator های مربوط به ناحیه شروع و پایان را دریافت کرده و مرتب می کنه شما با اجرای چند thread  و با فراخوانی متد مرتب سازی برای هر thread و سپس فرستادن iterator های هر ناحیه می تونید به صورت موازی کل vector را مرتب کنید.
در ضمن علت استفاده از pattern iterator به این خاطر هستش که شما نیاز نیست که مرتب سازی بالا فقط روی vector عمل کنه بلکه به راحتی list را هم می تونید بوسیله آن مرتب کنید.
...