مقدمة
في الدرس السابق تعرفنا على الخوارزميات (Algorithms) في STL، وعرفنا كيف يمكن استخدامها للبحث والترتيب ومعالجة البيانات.
لكن معظم خوارزميات STL تحتاج إلى طريقة للوصول إلى العناصر الموجودة داخل الحاويات.
وهنا يأتي دور Iterators.
---
ما هو Iterator؟
الـ Iterator هو كائن يسمح لنا بالتنقل بين عناصر حاوية معينة والوصول إلى بياناتها.
يمكن اعتباره شبيهًا بالمؤشر، لكنه مصمم للعمل مع حاويات STL بطريقة منظمة.
---
لماذا نستخدم Iterators؟
تساعد Iterators على:
التنقل بين العناصر
الوصول إلى البيانات
تحديد نطاق الخوارزمية
استخدام الخوارزميات مع الحاويات المختلفة
ولهذا تعتبر جزءًا أساسيًا من تصميم STL.
---
البداية والنهاية
توفر معظم الحاويات دالتين مهمتين:
begin()
تشير إلى بداية العناصر.
end()
تشير إلى الموضع الذي يأتي بعد آخر عنصر.
وهذا الفرق مهم جدًا عند التعامل مع Iterators.
---
Iterators والخوارزميات
تستخدم خوارزميات STL الـ Iterators لتحديد العناصر التي ستعمل عليها.
فبدلًا من جعل الخوارزمية مرتبطة بحاوية محددة، يمكنها التعامل مع نطاق من العناصر عن طريق Iterators.
وهذا يجعل الخوارزميات أكثر مرونة.
---
أنواع Iterators
توفر C++ أنواعًا مختلفة من Iterators، وتختلف قدراتها حسب نوع الحاوية.
من أشهر الأنواع:
Input Iterator
Output Iterator
Forward Iterator
Bidirectional Iterator
Random Access Iterator
ولا تحتاج جميع الحاويات إلى النوع نفسه.
---
العلاقة بين Iterator والمؤشر
يشبه Iterator المؤشر في بعض الجوانب، مثل إمكانية الوصول إلى العنصر الذي يشير إليه.
لكن Iterator مصمم للعمل مع بنية STL ويوفر عمليات تختلف حسب نوع الحاوية.
لذلك لا يجب اعتباره مجرد مؤشر عادي.
---
استخدام Iterators مع الحاويات
يمكن استخدام Iterators مع العديد من حاويات STL، مثل:
vector
list
set
map
لكن طريقة التنقل والعمليات المتاحة قد تختلف حسب نوع الحاوية.
---
Iterators وRange-Based For Loop
في C++ الحديثة يمكن استخدام Range-Based For Loop للتنقل بين العناصر بطريقة أبسط في كثير من الحالات.
ومع ذلك، تظل Iterators مهمة جدًا لأنها تستخدم بشكل مباشر مع العديد من خوارزميات STL وتمنح المبرمج تحكمًا أكبر.
---
فوائد Iterators
من أهم فوائدها:
توحيد طريقة الوصول إلى عناصر الحاويات
العمل مع خوارزميات STL
تسهيل التنقل بين البيانات
فصل الخوارزميات عن نوع الحاوية
توفير مرونة أكبر في التعامل مع البيانات
---
أخطاء شائعة عند المبتدئين
من الأخطاء الشائعة:
محاولة الوصول إلى العنصر الموجود عند end()
استخدام Iterator بعد حذفه أو إبطاله
الخلط بين Iterator والمؤشر العادي
استخدام عمليات غير مدعومة من نوع Iterator معين
لذلك يجب معرفة خصائص الـ Iterator الذي نتعامل معه.
---
ملخص الدرس
تعرفنا في هذا الدرس على Iterators في C++، وعرفنا أنها أدوات تسمح بالتنقل بين عناصر حاويات STL والوصول إليها، كما تعرفنا على begin() وend() وعلاقة Iterators بالخوارزميات والحاويات.
في الدرس السادس والثلاثون سنتعرف على vector في C++ بشكل أعمق، وسنفهم كيف نستخدمه لتخزين مجموعة من العناصر وتعديلها أثناء تشغيل البرنامج.



