Τεχνολογίες Υλοποίησης Αλγορίθµων

Σχετικά έγγραφα
Τεχνολογίες Υλοποίησης Αλγορίθµων

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 5

Standard Template Library (STL) C++ library

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 1

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

Δομές Δεδομένων Ενότητα 1

Τεχνολογίες Υλοποίησης Αλγορίθµων

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Διοικητική Λογιστική

Εισαγωγή στους Αλγορίθμους Ενότητα 11η Άσκηση - Σταθμισμένος Χρονοπρογραμματισμός Διαστημάτων

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Δομές Δεδομένων Ενότητα 3

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 4

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 8

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

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

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

Οντοκεντρικός Προγραμματισμός

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Μηχανολογικό Σχέδιο Ι

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Οντοκεντρικός Προγραμματισμός

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Προγραμματισμός Η/Υ. 4 η ενότητα: Δομές Δεδομένων. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Εισαγωγή στους Αλγορίθμους Ενότητα 10η

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Εισαγωγή στην Πληροφορική

Διοικητική Λογιστική

Βάσεις Περιβαλλοντικών Δεδομένων

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2

Διδακτική Πληροφορικής

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Ψηφιακή Επεξεργασία Εικόνων

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Standard Template Library (STL)

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Βάσεις Περιβαλλοντικών Δεδομένων

Προγραμματισμός Η/Υ. Αλγόριθμοι. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Βέλτιστος Έλεγχος Συστημάτων

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Κβαντική Επεξεργασία Πληροφορίας

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

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

Ιστορία της μετάφρασης

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Προγραμματισμός Η/Υ. 7 η ενότητα: Αρχεία. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Εισαγωγή στην Πληροφορική

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους (1)

ΣΥΜΠΕΡΙΦΟΡΑ ΚΑΤΑΝΑΛΩΤΗ

Τεχνικό Σχέδιο - CAD

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Εισαγωγή στην Πληροφορική

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

Διοίκηση Επιχειρήσεων

Διδακτική Πληροφορικής

Εφαρμογές των Τεχνολογιών της Πληροφορίας και των Επικοινωνιών στη διδασκαλία και τη μάθηση

Διδακτική Πληροφορικής

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

Εισαγωγή στους Υπολογιστές

Τεχνικό Σχέδιο - CAD

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους

Μάρκετινγκ Αγροτικών Προϊόντων

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 6

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Ηλεκτρονικοί Υπολογιστές

Δυναμική και Έλεγχος E-L Ηλεκτρομηχανικών Συστημάτων

Κβαντική Επεξεργασία Πληροφορίας

Βάσεις Δεδομένων. Ενότητα 1: Εισαγωγή στις Βάσεις δεδομένων. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

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

Διδακτική της Πληροφορικής

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

ΗΛΕΚΤΡΟΝΙΚΗ IΙ Ενότητα 6

Transcript:

Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών Εισαγωγή στον Γενικευµένο Προγραµµατισµό και τη Standard Template Library (STL) 1 / 36

Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ϱητώς. 2 / 36

Χρηµατοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδηµαϊκά Μαθήµατα στο Πανεπιστήµιο Πατρών» έχει χρηµατοδοτήσει µόνο τη αναδιαµόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράµµατος «Εκπαίδευση και ια Βίου Μάθηση» και συγχρηµατοδοτείται από την Ευρωπαϊκή Ενωση (Ευρωπαϊκό Κοινωνικό Ταµείο) και από εθνικούς πόρους. 3 / 36

Περιεχόµενα Εισαγωγή στο Γενικευµένο Προγραµµατισµό (Generic Programming) Τα Concepts στον προγραµµτισµό Η ϐιβλιοθήκη STL Βασικοί containers και iterators της STL 4 / 36

Γενικευµένος Προγραµµατισµός (Generic Programming) Ορισµοί My working definition of generic programming is programming with concepts, where a concept is defined as a family of abstractions that are all related by a common set of requirements. (Dave Musser) Generic programming is a subdiscipline of computer science that deals with finding abstract representations of efficient algorithms, data structures, and other software concepts, and with their systematic organization. (Czarnecki, Eisenecker) 5 / 36

Γενικευµένος προγραµµατισµός Ο σκοπός του γενικευµένου προγραµµατισµού είναι η ανάπτυξη λογισµικού που να επιτρέπει την επαναχρησιµοποίηση (reuse) µε απλό και αποδοτικό τρόπο. Η πράξη έχει δείξει ότι ο πρόχειρος αντικειµενοστρεφής προγραµµατισµός έχει σαν αποτέλεσµα µη ευέλικτα σύνολα αντικειµένων µε µικρή δυνατότητα επαναχρησιµοποίησης. 6 / 36

Παράδειγµα µη γενικευµένου αλγορίθµου Αντιγραφή στοιχείων void* memcpy(void* region1, const void* region2, size_t n) { const char* first = region2; const char* last = region2 + n; char* result = region1; while (first!= last) *result++ = *first++; return result; } Η memcpy() είναι γενικευµένη ως προς τον τύπο των στοιχείων αλλά όχι ως προς τη σειρά προσπέλασης. 7 / 36

Γενίκευση Πώς γενικεύεται η λειτουργία της αντιγραφής ενός συνόλου στοιχείων; Μετά από εξέταση της memcpy() προκύπτει ότι οι ελάχιστες απαιτήσεις της είναι να απαριθµήσει τα στοιχεία του συνόλου, να γνωρίζει που πρέπει να σταµατήσει και να γράψει τα στοιχεία στον προορισµό. Η διαδικασία εύρεσης των ελάχιστων απαιτήσεων ενός αλγορίθµου ονοµάζεται lifting. Στον γενικευµένο προγραµµατισµό αυτές οι απαιτήσεις οµαδοποιούνται σε ιδέες (concepts). 8 / 36

Παράδειγµα - γενικευµένη αντιγραφή template <typename InputIterator, typename OutputIterator> OutputIterator copy(inputiterator first, InputIterator last, OutputIterator result) { while (first!= last) *result++ = *first++; return result; } 9 / 36

Concepts Γενικά µία ιδέα είναι ένα σύνολο απαιτήσεων. Οι απαιτήσεις µπορεί να είναι: Εγκυρες παραστάσεις (valid expressions) Συµπληρωµατικοί τύποι Invariants Πολυπλοκότητες χώρου ή χρόνου 10 / 36

Concepts Μία ιδέα που επεκτείνει τις απαιτήσεις µιας άλλης λέγεται ότι αποτελεί εκλέπτυνσή (refinement) της (π.χ. Το back insertion sequence αποτελεί refinement του sequence). Ενας τύπος που πληρεί τις απαιτήσεις λέγεται ότι µοντελοποιεί (models) την ιδέα (π.χ. Το vector µοντελοποιεί τα random access container και back insertion sequence). 11 / 36

Concepts και C++ Στην τρέχουσα µορφή της C++ (C++03) τα concepts ορίζονται µόνο έµµεσα, µε χρήση templates, ή καταγράφονται σε τεκµηρίωση εκτός της γλώσσας. Στην επόµενη έκδοση του προτύπου (C++0x) τα concepts (και γενικώς οι ιδέες του γενικευµένου προγραµµατισµού) ϑα είναι ενσωµατωµένο χαρακτηριστικό της γλώσσας, µε δυνατότητες για τον ορισµό και τη χρήση τους. Παράδειγµα: InputIterator concept concept InputIterator<typename Iter, typename Value> { requires Regular<Iter>; Value operator*(const Iter&); Iter& operator++(iter&); Iter operator++(iter&, int); } 12 / 36

Εισαγωγή στην STL Η Standard Template Library χρησιµοποιεί τις αρχές του γενικευµένου προγραµµατισµού και παρέχει ένα σύνολο δοµών δεδοµένων και αλγορίθµων. Η δοµή της ϐιβλιοθήκης εγγυάται ότι αλγόριθµοι της STL µπορούν να χρησιµοποιηθούν σε αντικείµενα χρηστών και δοµές της STL µπορούν να χρησιµοποιηθούν σε αλγορίθµους χρηστών. Αυτή η ευελιξία οφείλεται στην πλήρη περιγραφή των απαιτήσεων κάθε δοµής και αλγορίθµου. Η STL είναι πολύ αποδοτική και ϐασίζεται σε σταθερά ϑεωρητικά ϑεµέλια. 13 / 36

Εισαγωγή στην STL υσκολίες κατά την ανάπτυξη µιας ϐιβλιοθήκης τύπων δεδοµένων: Μεγάλο πλήθος τύπων (int, float, user-defined types κτλ.) Μεγάλο πλήθος δοµών δεδοµένων (πίνακες, λίστες, σωροί κτλ.) Μεγάλο πλήθος αλγορίθµων (αναζήτηση, ταξινόµηση κτλ.) Απαιτείται κώδικας για πολύ µεγάλο αριθµό συνδυασµών. 14 / 36

Εισαγωγή στην STL Οι λύσεις της STL: Γενικευµένες δοµές δεδοµένων Γενικευµένος τρόπος πρόσβασης στις δοµές δεδοµένων Γενικευµένοι αλγόριθµοι που ενεργούν σε οµάδες διαφορετικών δοµών δεδοµένων (π.χ. ένας αλγόριθµος ταξινόµησης για λίστες και πίνακες) Οδηγεί σε λιγότερο και πολύ πιο ευέλικτο κώδικα. 15 / 36

Συστατικά στοιχεία της STL Η STL αποτελείται κυρίως από πέντε κατηγορίες αντικειµένων: Containers Algorithms Iterators Function Objects Adaptors 16 / 36

STL Containers Τα Containers είναι αντικείµενα που περιέχουν µία οργανωµένη συλλογή άλλων αντικειµένων. Η STL παρέχει δύο κατηγορίες containers: Sequence (ακολουθίες): vector, list, deque Associative (συσχετιστικά): set, map, κτλ. 17 / 36

Παράδειγµα sequence container: STL vector Το vector είναι ένας δυναµικός πίνακας. Παράδειγµα χρήσης: #include <vector> using namespace std; // all STL objects are in std... vector<int> v; v.push_back(7); v.push_back(2); for (int i = 0; i < v.size(); i++) cout << v[i]; 18 / 36

STL Iterators Οι iterators είναι µία γενίκευση των δεικτών και περιγράφουν τις απαιτήσεις της προσπέλασης των δοµών δεδοµένων (π.χ. containers). Ετσι επιτρέπουν τον χειρισµό των δοµών µε οµοιόµορφο τρόπο χωρίς να απαιτείται επιπλέον πληροφορία για την εσωτερική οργάνωση της δοµής. Οι iterators χρησιµοποιούνται στην STL για τον προσδιορισµό ϑέσης ή διαστήµατος σε µία δοµή δεδοµένων. 19 / 36

STL Iterators Οι iterators της STL κατατάσσονται σε πέντε κατηγορίες ανάλογα µε τις λειτουργίες που επιδέχονται. Iterator Category Βασικές λειτουργίες Input *it, ++, ==,!= Output *it = x, ++ Forward Input & Output Bidirectional Forward, -- Random Acesss Bidirectional, +n, -n, +=n, -=n 20 / 36

Κατηγορίες Iterators Κατηγορίες iterators που παρέχονται από τα containers της STL. Container vector list deque set, multiset map, multimap Iterator Category random access bidirectional random access bidirectional bidirectional 21 / 36

STL Iterators Παράδειγµα: vector<int> v; vector<int>::iterator vi; // Could also be vector<int>::const_iterator vi; for (vi = v.begin(); vi!= v.end(); vi++) cout << *vi; 22 / 36

STL Algorithms Οι αλγόριθµοι στην STL παραµετροποιούνται µε διαφορετικούς τύπους iterators (ανάλογα µε τις απαιτήσεις του κάθε αλγορίθµου) και εποµένως δεν εξαρτώνται από την εσωτερική υλοποίηση των δοµών δεδοµένων. Οι κατηγορίες των iterators που παρέχονται από κάθε δοµή καθορίζουν και το είδος των αλγορίθµουν που µπορούν να εκτελεστούν (αποδοτικά) στη δοµή. Η STL παρέχει µεγάλο αριθµό γενικευµένων αλγορίθµων από απλούς, όπως ο for_each(), µέχρι πιο σύνθετους, όπως αλγορίθµους αναζήτησης και ταξινόµησης (π.χ. sort(), binary_search()). Οι αλγόριθµοι περιέχονται στο header file <algorithm>. 23 / 36

STL Algorithms Παράδειγµα χρήσης: vector<int> v; list<int> l; // Assume these have values sort(v.begin(), v.end()); // iter points to element if found, to v.end() otherwise vector<int>::iterator iter = find(v.begin(), v.end(), 5); // Same algorithm, different structure list<int>::iterator iter2 = find(l.begin(), l.end(), 5); 24 / 36

STL Function Objects Τα function objects (functors) είναι κλάσεις στις οποίες έχει υπερφορτωθεί ο τελεστής () οπότε µπορούν να συµπεριφέρονται σαν συναρτήσεις. Τα functors υπερέχουν έναντι των συναρτήσεων καθώς είναι πιο κοµψά κι ευέλικτα στη χρήση τους (π.χ. αντί για δείκτες σε συναρτήσεις) και µπορούν να έχουν υψηλού επιπέδου λειτουργικότητα (π.χ. αποθηκεύοντας µια εσωτερική κατάσταση). Η STL παρέχει µεγάλο πλήθος από function objects για διάφορες κατηγορίες λειτουργιών όπως αριθµητικές πράξεις (plus, minus, κτλ.) και συγκρίσεις (less, greater, κτλ.). 25 / 36

STL Function Objects vector<int> v; sort(v.begin(), v.end(), less<int>()); sort(v.begin(), v.end(), greater<int>()); transform(v.begin(), v.end(), v.begin(), bind1st(plus<int>(), 1)); // We can use our own functor with STL algorithms template<typename T> struct Adder { Adder() : total(0) {} void operator()(const T& t) { total += t; } }; T total; // We can generalise for loops Adder<int> A = for_each(v.begin(), v.end(), Adder<int>()); cout << A.total << endl; 26 / 36

STL Adaptors Οι Adaptors είναι κλάσεις που ϐασίζονται σε άλλες κλάσεις για την παροχή νέας λειτουργικότητας. Είναι δυνατόν να «αποκρύπτουν» µεθόδους ή να παρέχουν νέες. Υπάρχουν adaptors για διάφορα τµήµατα της STL (π.χ. containers, iterators). 27 / 36

STL Container Adaptors Οι πιο συχνά χρησιµοποιούµενοι container adaptors είναι οι stack, queue και priority_queue. Είναι δυνατόν να παραµετροποιηθούν µε τη χρήση vector, list ή deque. Παρέχουν τις συνήθεις λειτουργίες στοίβας, ουράς και ουράς προτεραιότητας. Παράδειγµα χρήσης: stack< vector<int> > s1; stack< list<int> > s2; s1.push(2); s1.pop(); s2.push(3); s2.pop(); 28 / 36

STL Iterator Adaptors Η STL παρέχει adaptor για τη µετατροπή ενός bidirectional ή random access iterator σε reverse iterator, δηλαδή ενός iterator που διατρέχει τα στοιχεία µίας δοµής κατά την αντίθετη ϕορά. Ενας reverse iterator παρέχεται από τις µεθόδους rbegin() και rend() των κλάσεων που µοντελοποιούν το concept reversible container. vector<int> v; v.push_back(1); v.push_back(2); vector<int>::reverse_iterator vi; for (vi = v.rbegin(); vi!= v.rend(); vi++) cout << *vi << " "; // prints "2 1" // Even more generic copy(v.rbegin(), v.rend(), ostream_iterator<int>(cout, " ")); 29 / 36

Αλλα στοιχεία της STL Πλήθος από έτοιµους αλγόριθµους και function objects ιαχείριση µνήµης: allocators, auto_ptr, κτλ. Αλλοι adaptors: negators, iterator adaptors, function pointer adaptors κτλ. 30 / 36

Περισσότερες πληροφορίες Technical Report 1 Το TR1 περιγράφει επεκτάσεις στην ϐιβλιοθήκη της C++ που πρόκειται πιθανότατα να περιληφθούν στο επόµενο πρότυπο. Πολλοί µεταγλωτιστές υποστηρίζουν ήδη αρκετά στοιχεία του. Το TR1 περιέχει µεταξύ άλλων: Κλάσεις κατακερµατισµού: unordered_set, unordered_map Λειτουργικότητα για regular expressions Γεννήτριες τυχαίων αριθµών Νέα function objects Σχετικοί ιστότοποι http://www.generic-programming.org http://www.boost.org 31 / 36

Τέλος Ενότητας 32 / 36

Σηµείωµα Ιστορικού Εκδόσεων Εργου Το παρόν έργο αποτελεί την έκδοση 1.0. 33 / 36

Σηµείωµα Ιστορικού Εκδόσεων Εργου Copyright Πανεπιστήµιο Πατρών, Χρήστος Ζαρολιάγκης, 2014. «Τεχνολογίες Υλοποίησης Αλγορίθµων». Εκδοση: 1.0. Πάτρα 2014. ιαθέσιµο από τη δικτυακή διεύθυνση: https://eclass.upatras.gr/courses/ceid1084 34 / 36

Σηµείωµα Ιστορικού Εκδόσεων Εργου Το παρόν υλικό διατίθεται µε τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εµπορική Χρήση, Οχι Παράγωγα Εργα 4.0 [1] ή µεταγενέστερη, ιεθνής Εκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. ϕωτογραφίες, διαγράµµατα κ.λ.π., τα οποία εµπεριέχονται σε αυτό. [1] http://creativecommons.org/licenses/by-nc-nd/4.0 Ως Μη Εµπορική ορίζεται η χρήση: που δεν περιλαµβάνει άµεσο ή έµµεσο οικονοµικό όφελος από την χρήση του έργου, για το διανοµέα του έργου και αδειοδόχο που δεν περιλαµβάνει οικονοµική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανοµέα του έργου και αδειοδόχο έµµεσο οικονοµικό όφελος (π.χ. διαφηµίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος µπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιµοποιεί το έργο για εµπορική χρήση, εφόσον αυτό του Ϲητηθεί. 35 / 36

ιατήρηση Σηµειωµάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού ϑα πρέπει να συµπεριλαµβάνει : το Σηµείωµα Αναφοράς το Σηµείωµα Αδειοδότησης τη δήλωση ιατήρησης Σηµειωµάτων το Σηµείωµα Χρήσης Εργων Τρίτων (εφόσον υπάρχει) µαζί µε τους συνοδευόµενους υπερσυνδέσµους 36 / 36