איטרטור – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
אין תקציר עריכה
הרחבה, דוגמה: חיפוש לינארי
שורה 3:
רבות מ[[שפת תכנות|שפות התכנות]] העדכניות מאפשרות להגדיר [[אלגוריתם|אלגוריתמים]] דרך פעולתם על איטרטורים. האלגוריתם המתקבל מסוגל לפעול על כל מבנה נתונים התומך באיטרטורים.
 
נקח כדוגמה אלגוריתם פשוט - חיפוש לינארי: יש לעבור איבר איבר על איברי קבוצה, עד שמוצאים איבר המתאים לקריטריון כלשהו. השאלה היא מה משמעות "לעבור איבר איבר":
נניח, לדוגמה, שקיימים <math>m</math> מבני נתונים שונים, ו<math>n</math> אלגוריתמים. שימוש באיטרטורים מאפשר כתיבת <math>m + n</math> קטעי [[קוד מקור|קוד]], במקום <math>m n</math> קטעי קוד (אחד לכל שילוב אפשרי של אלגוריתם ומבנה נתונים). זהו הבסיס לרבות מספריות מבני הנתונים והאלגוריתמים העדכניות (למשל ב[[ספריית התבניות התקנית#איטרטורים|שפת התכנות ++C]]).
# ב[[מערך]], יש לקדם מצביע כך שיצביע לאיבר הבא במערך.
# ב[[רשימה מקושרת]], יש לעקוב אחרי המצביע לחוליה הבאה בחוליה הנוכחית.
# ב[[עץ חיפוש]] בינארי, ישנה חוקיות מסובכת יותר (המתחיל בכלל: אם לצומת יש בן ימני, יש לעבור אליו, ולהמשיך לרדת שמאלה ככל האפשר).
 
השימשו באיטרטורים מאפשר להגדיר אלגוריתם יחידי לחיפוש לינארי, המתאים לכל אחת מאפשרויות אלו:
# בקש ממבנה הנתונים איטרטור לאיבר הראשון; קבע את האיטרטור הנוכחי כאיטרטור זה.
# בקש ממבנה הנתונים איטרטור לאיבר האחרון.
# כל עוד האיבר המוצבע ע"י האיטרטור הנוכחי אינו ממלא את הקריטריון, בדוק האם הוא שקול לאיטרטור האחרון, ואם לא, קדם אותו.
 
נניחבהכללה, לדוגמה,נניח שקיימים <math>m</math> מבני נתונים שונים, ו<math>n</math> אלגוריתמים. שימוש באיטרטורים מאפשר כתיבת <math>m + n</math> קטעי [[קוד מקור|קוד]], במקום <math>m n</math> קטעי קוד (אחד לכל שילוב אפשרי של אלגוריתם ומבנה נתונים). זהו הבסיס לרבות מספריות מבני הנתונים והאלגוריתמים העדכניות (למשל ב[[ספריית התבניות התקנית#איטרטורים|שפת התכנות ++C]]).
[[קטגוריה:תכנות]]
[[קטגוריה:קצרמר מדעים]]