Πρότυπα και διανύσματα

Σχετικά έγγραφα
ΣΧΕΔΙΟΤΥΠΑ (TEMPLATES)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

διανύσματα - Πίνακες - Struct Στατικό διάνυσμα Είσοδος Έξοδος δεδομένων Συναρτήσεις Χειρισμός σφαλμάτων ΤΕΤΑΡΤΗ ΔΙΑΛΕΞΗ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Αναφορές, είκτες και Αλφαριθμητικά

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Κλάσεις και αντικείμενα #include <iostream.h<

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

POINTERS, AGGREGATION, COMPOSITION

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

Διδάσκων: Παναγιώτης Ανδρέου

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

Κεφάλαιο 7: Υπορουτίνες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αρχιτεκτονική Υπολογιστών

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΠΡΟΓΡΑΜΜΑ synartisi_se_diadikasia ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: A[10], max, i, C, S, B, maxmax ΑΡΧΗ

scanf() scanf() stdin scanf() printf() int float double %lf float

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Τελικό τεστ - απαντήσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Προγραμματισμός Ι (ΗΥ120)

Διαγράμματα UML στην Ανάλυση. Μέρος Γ Διαγράμματα Επικοινωνίας Διαγράμματα Ακολουθίας Διαγράμματα Μηχανής Καταστάσεων

Standard Template Library (STL) C++ library

Α ν ύ σ μ α τ α - V e c t o r s

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Προγραμματισμός Υπολογιστών με C++

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Αντικειμενοστραφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Δομημένος Προγραμματισμός

Συλλογές, Στοίβες και Ουρές

Διαδικασιακός Προγραμματισμός

Εισαγωγή στον Προγραμματισμό με C++

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Λογισµικό (Software SW) Γλώσσες

Δομές Δεδομένων Boost C++ Libraries. 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Σύνθεση και Κληρονομικότητα

Σέργιος Θεοδωρίδης Κωνσταντίνος Κουτρούμπας. Version 2

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h

Δομημένος Προγραμματισμός

Προγραμματισμός Αναδρομή

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

19. ΠΡΟΤΥΠΑ (TEMPLATES)

Προγραμματισμός Αναδρομή

Εναλλακτικές εντολές για ανάγνωση/εγγραφή

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ. Πως γίνεται ο ορισμός μιας διαδικασίας; Να δοθούν σχετικά παραδείγματα. ΑΡΧΗ Εντολές ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

Γραφικά Υπολογιστών: Σχεδίαση γραμμών (Bresenham), Σχεδίασης Κύκλων, Γέμισμα Πολυγώνων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Θέματα Προγραμματισμού Η/Υ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Σύνθεση και Κληρονομικότητα

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

Δομημένος Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Προγραμματισμός Υπολογιστών με C++

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

Transcript:

Πρότυπα και διανύσματα Πρότυπα συναρτήσεων Πρότυπα κλάσεων Παραδείγματα ιανύσματα της καθιερωμένης C++ Επαναλήπτες σε διανύσματα 1

Πρότυπα συναρτήσεων Το πρότυπο (template) είναι μια αφηρημένη συνταγή για την παραγωγή συμπαγούς κώδικα. Τα πρότυπα μπορούν να χρησιμοποιηθούν για τη δημιουργία συναρτήσεων και κλάσεων. Για παράδειγμα οι παρακάτω δύο συναρτήσεις αντιμεταθέτουν δύο ακεραίους ή δύο strings: void exchange(int& m, int& n){ void exchange(string& s1, string& s2) { int temp = m; string temp = s1; m=n; s1=s2; n=temp; } s2=temp; } Οι παραπάνω δύο συναρτήσεις κάνουν ουσιαστικά το ίδιο πράγμα. Η μόνη διαφορά έγκειται στον τύπο του αντικειμένου που αντιμεταθέτουν. Μπορούμε να αποφύγουμε αυτή την επανάληψη αντικαθιστώντας τις δύο συναρτήσεις με το ακόλουθο πρότυπο συνάρτησης (function template). template <class T> void exchange(t& x, T& y) { T temp = x; x=y; y=temp;} Το σύμβολο T ονομάζεται παράμετρος τύπου (type parameter). Είναι απλώς ένα δεσμευτικό θέσης το οποίο αντικαθίσταται από τον πραγματικό τύπο ή την κλάση κατά την κλήση της συνάρτησης. 2

Πρότυπα συναρτήσεων 3

Πρότυπα Κλάσεων Τα πρότυπα κλάσεων (class template) δίνουν την δυνατότητα να σχεδιάζουμε κλάσεις οι οποίες έχουν μέλη ο τύπος των οποίων προσδιορίζεται από πρότυπες παραμέτρους. Ακολουθεί απλό παράδειγμα: 4

Πρότυπα Κλάσεων: Παράδειγμα Stack Στο διπλανό παράδειγμα αναπτύσσουμε το παράδειγμα μιας πρότυπης στοίβας. 5

Πρότυπα Κλάσεων: Παράδειγμα Stack Η στοίβα (stack) είναι μια απλή δομή δεδομένων η οποία προσομοιώνει μια συνηθισμένη στοίβα αντικειμένων ιδίου τύπου, με τους περιορισμούς ότι ένα αντικείμενο μπορεί να προστεθεί στη στοίβα και να αφαιρεθεί από αυτή μόνον από την κορυφή της. Στο παρακάτω διάγραμμα εικονίζονται τα αντικείμενα που δημιουργεί το πρόγραμμα. 6

Πρότυπα Κλάσεων: Παράδειγμα Vector Στο διπλανό παράδειγμα αναπτύσσουμε ένα απλό παράδειγμα Vector. 7

Πρότυπα Κλάσεων: Παράδειγμα Vector Ένα διάνυσμα (vector) είναι μια δεικτοδοτημένη ακολουθία αντικειμένων του ιδίου τύπου. Προσέξτε ότι σε κάθε υλοποίηση συνάρτησης μέλους πρέπει να προηγείται το ίδιο προσδιοριστικό προτύπου που προηγείται της δήλωσης της κλάσης: template<class T>. Στο παρακάτω διάγραμμα εικονίζονται τα αντικείμενα που δημιουργεί το πρόγραμμα. 8

ιανύσματα της καθιερωμένης C++ Τα αντικείμενα vector αποτελούν μια καλή εναλλακτική λύση απέναντι στους πίνακες. Το πρότυπο vector ορίζεται στο αρχείο-κεφαλίδα <vector>. Το διπλανό απλό πρόγραμμα δημιουργεί ένα διάνυσμα v με οκτώ αλφαριθμητικά. Οι συναρτήσεις load() και print() φορτώνουν και τυπώνουν το διάνυσμα. Αντί του αντικειμένου vector το πρόγραμμα μπορεί να γραφεί με τη χρήση ενός πίνακα αλφαριθμητικών: string v[size] 9

ιανύσματα της καθιερωμένης C++ Πρόκειται για το ίδιο πρόγραμμα της προηγούμενης διαφάνειας. Εδώ χρησιμοποιείται το αναγνωριστικό τύπου strings στη θέση του vector<string>. Παρατηρήστε ότι, όταν δημιουργείται το διάνυσμα v, έχει 0 στοιχεία. Κάθε φορά που καλείται η συνάρτηση push_back(), προσαρτά ένα νέο στοιχείο στο τέλος του διανύσματος και αυξάνει το μέγεθός του. 10

Επαναλήπτες σε διανύσματα Ο επαναλήπτης (iterator) είναι ένα αντικείμενο που έχει την δυνατότητα να διατρέχει ένα σύνθετο αντικείμενο-αποδέκτη. Συμπεριφέρεται σαν δείκτης (pointer), εντοπίζοντας ένα στοιχείο κάθε φορά στον αποδέκτη. Οι πέντε θεμελιώδεις λειτουργίες ενός επαναλήπτη είναι οι ακόλουθες: Απόδοση αρχικής τιμής στον επαναλήπτη, κάποιας αρχικής θέσης στον αποδέκτη. Επιστροφή των τιμών των δεδομένων που είναι αποθηκευμένες στην τρέχουσα θέση. Αλλαγή της τιμής δεδομένων που είναι αποθηκευμένη στην τρέχουσα θέση. Προσδιορισμός εάν πραγματικά υπάρχει κάποιο στοιχείο στην τρέχουσα θέση του επαναλήπτη. Προώθηση στην επόμενη θέση του αποδέκτη. Στο πρόγραμμα που ακολουθεί ορίζεται το αναγνωριστικό τύπου Sit το οποίο είναι επαναλήπτης για διανύσματα αλφαριθμητικών. Κατόπιν χρησιμοποιείται ένας τέτοιος επαναλήπτης στη συνάρτηση print(), για να διατρέξει το διάνυσμα.

Επαναλήπτες σε διανύσματα 12