تابع begin در سی پلاس پلاس
در این بخش به بررسی تابع begin در سی پلاس پلاس می پردازیم، در برنامهنویسی به زبان C++، یکی از ابزارهای اصلی مدیریت دادهها، ساختارهای داده مختلف و کتابخانههای استاندارد آن است. یکی از این کتابخانهها، <list>
میباشد که برای ذخیره و مدیریت مجموعهای از عناصر به کار میرود. std::list
یکی از ساختارهای دادهای مهم در C++ است که نوعی لیست پیوندی دوتایی به شمار میآید. این نوع از لیست به دلیل قابلیت افزودن و حذف سریع عناصر از هر نقطه از لیست، برای کاربردهای مختلفی مفید است.
یکی از توابع کلیدی مرتبط با std::list
، تابع begin()
است. این تابع برای دسترسی به اولین عنصر لیست استفاده میشود و یکی از اجزای ضروری در عملیات پیمایش لیستها و دیگر ساختارهای مشابه در زبان C++ است. در این مقاله، به بررسی کامل تابع begin()
در C++، نحوه استفاده از آن و مثالهایی از کاربرد آن خواهیم پرداخت تا به درک بهتری از این تابع و نقش آن در کتابخانهی <list>
برسیم.
تابع begin()
در C++ چیست؟
تابع begin()
در C++ یک تابع از پیش تعریف شده در کتابخانهی استاندارد است که برای دریافت اشارهگری به اولین عنصر در یک کانتینر (container) استفاده میشود. در کتابخانهی <list>
, این تابع به ما اجازه میدهد تا به اولین عنصر در std::list
دسترسی داشته باشیم و پیمایش لیست را از آنجا شروع کنیم.
این تابع به طور کلی دو نوع دارد:
- نسخهی غیرثابت (non-const) که به یک اشارهگر متغیر (iterator) به اولین عنصر لیست اشاره میکند و به ما امکان میدهد تا عنصر را تغییر دهیم.
- نسخهی ثابت (const) که اشارهگری به اولین عنصر ثابت لیست باز میگرداند و به ما اجازه نمیدهد مقدار آن را تغییر دهیم.
در کدهای C++، پیمایش و کار با عناصر مختلف ساختارهای دادهای مثل std::list
معمولاً با استفاده از این تابع شروع میشود.
نحوهی استفاده از تابع begin()
برای استفاده از تابع begin()
، ابتدا باید یک std::list
ایجاد کنیم و سپس با استفاده از این تابع به اولین عنصر لیست دسترسی پیدا کنیم. از آنجا که begin()
یک اشارهگر (iterator) به عنصر باز میگرداند، میتوانیم از آن برای پیمایش لیست استفاده کنیم.
مثال سادهای از نحوهی استفاده از این تابع را در زیر مشاهده میکنید:
در این مثال، تابع begin()
اشارهگری به اولین عنصر لیست باز میگرداند و ما از این اشارهگر برای چاپ اولین عنصر استفاده میکنیم. توجه داشته باشید که begin()
یک iterator
برمیگرداند، که باید از آن برای دسترسی به مقدار اولین عنصر استفاده کنیم (در اینجا با استفاده از عملگر *
).
پیمایش کامل لیست با استفاده از begin()
همانطور که اشاره شد، یکی از کاربردهای اصلی begin()
در پیمایش کل لیست است. معمولاً برای پیمایش لیست از ترکیب begin()
با end()
استفاده میشود. تابع end()
اشارهگری به یکی از عناصر بعد از آخرین عنصر لیست باز میگرداند (که در واقع عنصری ندارد)، و از این طریق میتوان انتهای لیست را تعیین کرد.
در زیر، مثالی از نحوهی پیمایش یک لیست با استفاده از begin()
و end()
آورده شده است:
در این مثال، ابتدا از begin()
برای گرفتن اشارهگر به اولین عنصر استفاده میکنیم و با استفاده از حلقه for
و ترکیب آن با end()
، کل لیست را پیمایش میکنیم. این نوع پیمایش یکی از متداولترین روشها برای دسترسی به تمامی عناصر لیست است.
عملکرد تابع begin()
در برابر ساختارهای دادهای دیگر
علاوه بر std::list
، تابع begin()
در سایر ساختارهای دادهای موجود در کتابخانهی استاندارد C++ نیز وجود دارد، از جمله std::vector
، std::deque
و std::array
. با این حال، نکتهی مهم این است که نحوهی دسترسی به عناصر و همچنین پیادهسازیهای داخلی این ساختارها با هم متفاوت است. به عنوان مثال، در std::vector
که یک آرایه پیوسته است، دسترسی به عناصر به صورت مستقیم و با استفاده از اندیس انجام میشود، اما در std::list
که یک لیست پیوندی است، دسترسی به عناصر تنها از طریق پیمایش امکانپذیر است.
این تفاوت در نحوهی استفاده از begin()
برای دسترسی به اولین عنصر، تاثیر زیادی در انتخاب نوع ساختار داده برای یک برنامهنویس دارد. به طور کلی، std::list
در مواردی که افزودن و حذف عناصر از وسط یا ابتدای لیست زیاد اتفاق میافتد، انتخاب بهتری است، در حالی که std::vector
در مواردی که دسترسی سریع و متوالی به عناصر مورد نیاز است، مناسبتر است.
مثالهای پیشرفتهتر از استفادهی begin()
در مثالهای قبلی، تنها به موارد سادهای از استفادهی begin()
اشاره کردیم. اما در پروژههای پیچیدهتر، ممکن است بخواهیم از این تابع به شیوههای پیچیدهتری استفاده کنیم. برای مثال، ترکیب begin()
با دیگر توابع کتابخانهی استاندارد C++ مثل std::advance
یا توابع تغییر دهندهی محتوای کانتینر، میتواند کارایی زیادی داشته باشد.
در مثال زیر، از تابع std::advance
برای پیشروی iterator
به موقعیتهای مختلف در لیست استفاده میکنیم:
در این مثال، std::advance
به ما امکان میدهد تا اشارهگر را بدون نیاز به یک حلقه به موقعیت خاصی در لیست حرکت دهیم. این نوع استفاده از begin()
در پروژههایی که نیاز به دسترسی به موقعیتهای مختلف در لیست وجود دارد، بسیار کاربردی است.
تابع begin()
یکی از توابع کلیدی در کتابخانهی استاندارد C++ است که به ما اجازه میدهد تا به اولین عنصر لیست و سایر ساختارهای دادهای دسترسی پیدا کنیم. این تابع به ویژه در ساختارهایی مانند std::list
که یک لیست پیوندی دوتایی است، بسیار مفید است و پیمایش و مدیریت عناصر لیست را تسهیل میکند.
با استفاده از begin()
، میتوان به آسانی به اولین عنصر دسترسی پیدا کرد و کل لیست را پیمایش کرد. همچنین در پروژههای پیچیدهتر، این تابع میتواند در کنار توابع دیگری مانند std::advance
به کار رود تا کار با لیستها سادهتر و موثرتر شود.
آیا این مطلب برای شما مفید بود ؟