18

تستخدم 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.

مصادر:

http://www.cplusplus.com/articles/Lw6AC542

http://www2.hawaii.edu/~esb/2011spring.ics211/feb03.html

http://stackoverflow.com/questions/131241/why-use-iterators-instead-of-array-indices

انا استخدمت loop ك iterators في لبرمجة Newton's_method و طريقة القاطع و ايضا طريقة الموقع الخاطىء

يمكن إعتبارها مثل loop

مثلا في الـ vector تستعمل

vector<int>::iterator iter = v.begin();

ثم تستعمل iter للوصل إلى كل عناصر v

سؤال وجواب (كود)

مجتمع خاص بطرح الأسئلة المتعلقة بالأكواد البرمجية للإجابة عليها ومناقشة الحلول المقترحة وأما غير الأسئلة فتُطرح في مجتمع "البرمجة العامة".

272 متابع