تستخدم Iterators للتنقل بين عناصر الـ Object بطريقة أسرع وأفضل من الطريقة التقليدية. لنفترض أن لديك LinkedList list. وتريد طباعة كل عناصر القائمة. من الممكن إستخدام الأسلوب التقليدي:
for(int i=0; i<list.size(); i++){
cout << list.get(i) << endl;
}
هذه الطريقة غير فعالة بسبب أن كل مرة تستدعي فيها (get(i تحتاج أن تبدأ من بداية القائمة (head) وتستمر بالبحث عن العنصر i بإستخدام pointer يشير إلى العنصر القادم (node.next) حتى تصل إلى العنصر i. إذاً ما الحل؟ بكل بساطة يمكن تخزين reference يشير إلى آخر عنصر تمت زيارته في القائمة في iterator. هذه الطريقة تضمن وقت أقل للبحث داخل القائمة وكذلك تحافظ على reference بشكل خاص (encapsulation) يضمن عدم عبث المستخدم بالبيانات. وهذا مثال:
for (List<int>::iterator it= list.begin(); it!= list.end(); ++it){
cout << (*iter) << endl;
}
بعد كل عملية طباعة، it سينتقل إلى العنصر القادم في LinkedList دون الحاجة إلى البدء من أول عنصر (head) والبحث من جديد. وتذكر أن LinkedList تحتاج إلى implementation ودعم لـ iterator.
مصادر:
التعليقات