Skip to main content

Τι είναι ο φορέας iterator;

Ένας διανυσματικός iterator είναι ένα κατασκεύασμα γλώσσας υπολογιστή που επιτρέπει σε ένα πρόγραμμα να διαβάζει τις τιμές δεδομένων που περιέχονται σε μια εξειδικευμένη συλλογή που ονομάζεται διάνυσμα.Οι φορείς είναι αντικείμενα που χρησιμοποιούνται για την ομαδοποίηση των τιμών δεδομένων που σχετίζονται με τα δεδομένα, παρόμοια με τις συστοιχίες και τις λίστες.Πολλές διαφορετικές γλώσσες υπολογιστών, κυρίως Java και C ++, περιέχουν φορείς και τους σχετικούς iterators τους.Κάθε γλώσσα χρησιμοποιεί διαφορετική σύνταξη για τους iterators, αλλά ο υποκείμενος μηχανισμός σε όλες τις γλώσσες είναι η ατομική πρόσβαση σε κάθε πιθανό μέλος της ομάδας φορέα.

Η μετακίνηση μέσω ενός φορέα που χρησιμοποιεί ένα iterator συχνά ονομάζεται διασταύρωση ή iterating.Οι διανυσματικοί iterators μπορούν επίσης να χρησιμοποιηθούν για να εντοπίσουν ρητά ένα συγκεκριμένο αντικείμενο στη συλλογή φορέα.Όταν εκτελείται αυτή η αναγνώριση, το αντικείμενο αναγνωρίζεται από τον δείκτη του στον φορέα, όχι από τα χαρακτηριστικά του ίδιου του αντικειμένου.Οι ενέργειες μπορούν να εκτελεστούν στο αντικείμενο εάν ο iterator είναι απογοητευμένος, παρέχοντας στο πρόγραμμα ρητή πρόσβαση στο αντικείμενο και όχι στον φορέα.Παρόλο που οι φορείς είναι ουσιαστικά δοξασμένοι συστοιχίες όταν αποικοδομούνται, οι φορείς έχουν σχεδόν πάντα κάποιο είδος όρων που ελέγχουν ότι εξασφαλίζει ότι ένας διανυσματικός iterator παραμένει στους κατάλληλους δείκτες.Όταν διασχίζετε ένα διάνυσμα, ο iterator, αν ονομάζεται σωστά, αρχίζει πάντα από την αρχή του φορέα και τελειώνει ακριβώς στο τέλος.Η ρητή προδιαγραφή ενός λανθασμένου δείκτη εξακολουθεί να είναι δυνατή σε ορισμένα πλαίσια, αλλά οι ενσωματωμένοι όρια ελέγχου των φορέων, οι οποίοι μεταφράζονται στους iterators τους, αποτρέπουν τα προβλήματα υπερχείλισης των ορίων., αλλά η Java απαγορεύει ρητά αυτό να συμβεί.Οι ενέργειες Javas σε αυτή την περίπτωση είναι πολύ πιο ασφαλείς επειδή η αλλαγή ενός φορέα, ενώ ένας iterator κινείται σε αυτό μπορεί να προκαλέσει τον iterator να διαβάσει ακούσια έξω από τον φορέα.Η προσπάθεια προσθήκης ή κατάργησης στοιχείων από ένα διάνυσμα ενώ η iterating είναι ιδιαίτερα επικίνδυνη, ειδικά εάν οι δείκτες έναρξης και τερματισμού του φορέα πρέπει να καλύπτουν σκληρά κωδικοποιημένα.Ένας διανυσματικός iterator δεν είναι εξοπλισμένος για να χειριστεί ξαφνικές αλλαγές στους φορείς και οι φορείς προορίζονται να είναι σχετικά στατικές ενώ περνούν.

Ένας φορέας iterator μπορεί να είναι σιωπηλός ή ρητής, και είτε η συντακτική μορφή τρέχει την διαδρομή εξίσου ομαλά.Παρά το γεγονός ότι κωδικοποιείται για αποτελεσματικότητα, ένας φορέας iterator μπορεί να επιβραδυνθεί από ένα πολύ μεγάλο διάνυσμα.Σε αυτή την περίπτωση, η σκληρή κωδικοποίηση του τελικού δείκτη του φορέα επιταχύνει τις διαδρομές.Αυτό το πρόβλημα δεν εμφανίζεται με μικρούς φορείς, οπότε η σκληρή κωδικοποίηση του δείκτη τελικού δεν προκαλεί οποιαδήποτε αξιόλογη επιτάχυνση.Η σκληρή κωδικοποίηση του τελικού δείκτη μπορεί να αυξήσει τον κίνδυνο υπερχείλισης, οπότε γενικά πρέπει να γίνει με φειδώ.