Standard Template Library (STL)

Σχετικά έγγραφα
Standard Template Library (STL) C++ library

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

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

Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

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

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

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

Φροντιςτήριο. Linked-List

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

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D.

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

Μάθημα 21: Ουρές (Queues)

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

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

#2. Templates, η βιβλιοθήκη STL, μέτρηση χρόνου εκτέλεσης κώδικα, αλγόριθμοι ταξινόμησης, αλγόριθμοι αναζήτησης

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

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

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

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Δομές Δεδομένων και Αλγόριθμοι

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Συµβολοσειρές - Strings

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

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

Δομές Δεδομένων & Αλγόριθμοι

Γραμμικές λίστες. Γκόγκος Χρήστος ΤΕΙ Ηπείρου

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language)

242 -ΕισαγωγήστουςΗ/Υ

JDSL Java Data Structures Library

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

Δομές Επανάληψης. Εισαγωγή στη C++

Εργαστήριο 2: Πίνακες

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

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

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

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Δομές Δεδομένων και Αλγόριθμοι

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

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

HY150a Φροντιστήριο 3 24/11/2017

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++

Περιεχόμενα. Πρόλογος... 17

Δομές δεδομένων (2) Αλγόριθμοι

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

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Δομές Δεδομένων και Αλγόριθμοι

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Red-Black Δέντρα. Red-Black Δέντρα

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

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

17TimeThis.h function returns reference pointer to same object { return *this; }

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

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Εργαστήριο 3 Εντολή for while, do while

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Συναρτήσεις και Πίνακες

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

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

TEMPLATES STANDARD TEMPLATE LIBRARY

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

Σημειώσεις όγδοης εβδομάδας

AVL-trees C++ implementation

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

ΠΟΛΥΜΟΡΦΙΣΜΟΣ, ΠΡΟΤΥΠΑ, ΚΑΘΙΕΡΩΜΕΝΗ ΒΙΒΛΙΟΘΗΚΗ ΠΡΟΤΥΠΩΝ. Polymorphism, Templates, Standard Template Library (STL)

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

TEMPLATES, STL ΠΡΟΓΡΑΜΜΑΤΑ ΜΕ ΠΟΛΛΑ ΑΡΧΕΙΑ

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

Υπολογιστικά Mαθηματικά II

Δυναμική μνήμη με πίνακες και λίστες

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Week. 6: Java Collections

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

Δομημένος Προγραμματισμός (ΤΛ1006)

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

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

Transcript:

Standard Template Library (STL) Η χαρά του προγραμματιστή δαίμων - τεύχος 6 Μορφονιός Κωνσταντίνος http://www.di.uoa.gr/~kmorfo K.Morfonios@di.uoa.gr

Περιεχόμενα Τι είναι; Containers Algorithms Iterators Παραδείγματα Αναφορές

Τι είναι; Βιβλιοθήκη της C++ που προσφέρει: Containers Algorithms Iterators

Τι είναι; Γιατί χρειάζεται; Οι περισσότεροι έχουν προγραμματίσει διπλά συνδεδεμένη λίστα, πίνακα κατακερματισμού και σύνολα. ΑΛΛΑ Σε πόσο χρόνο; Memory leaks και debugging; Ήταν template; Είχε αποδοτικές μεθόδους (αναζήτηση, εισαγωγή, ταξινόμηση, συγχώνευση, ένωση, τομή, αφαίρεση διπλοτύπων, );

Τι είναι; Πλεονεκτήματα: Χρόνος ανάπτυξης και debugging Διαχείριση μνήμης Μικρότερο μέγεθος κώδικα Βασίζεται σε template classes Εύκολη στη χρήση

Τι είναι; Κάτι νέο; 1979 Alexander Stepanow στη HP Αργότερα David Musser και Meng Lee 1994: Προστέθηκε στο πρότυπο ANSI C++

Containers Βασικά συστατικά της STL Δομές δεδομένων Αποθηκεύουν και διαχειρίζονται τα πραγματικά δεδομένα Χωρίζονται σε 2 κατηγορίες: Sequences Associative containers

Containers Sequences: Διατεταγμένοι πίνακες αντικειμένων μεταβλητού μήκους vector deque list Επιτρέπουν εισαγωγή και διαγραφή στοιχείων σε οποιοδήποτε σημείο Βασική διαφορά: Το κόστος εξαρτάται από τον τύπο

Containers vector: Κόστος εισαγωγής στην αρχή σταθερό Κόστος εισαγωγής στο τέλος γραμμικό Κόστος εισαγωγής στη μέση γραμμικό Επιτρέπει τυχαία προσπέλαση

Containers deque: Κόστος εισαγωγής στην αρχή σταθερό Κόστος εισαγωγής στο τέλος σταθερό Κόστος εισαγωγής στη μέση γραμμικό Επιτρέπει τυχαία προσπέλαση

Containers list: Κόστος εισαγωγής στην αρχή σταθερό Κόστος εισαγωγής στο τέλος σταθερό Κόστος εισαγωγής στη μέση σταθερό Επιτρέπει όμως μόνο σειριακή προσπέλαση

Containers Associative containers: Γενίκευση των sequences map multimap set multiset Βασική διαφορά: Δεν δεικτοδοτούνται από ακεραίους αλλά από κάποιο κλειδί Το κλειδί αυτό μπορεί να είναι οποιουδήποτε τύπου

Containers map: Αποθηκεύει ζεύγη της μορφής <key, value> Κάτι σαν πίνακας κατακερματισμού (αλλά ) Επιτρέπει εισαγωγή, διαγραφή και αναζήτηση με κόστος λογαριθμικό Επιτρέπει ακόμα σειριακή προσπέλαση όλων των στοιχείων Δεν επιτρέπονται διπλότυπα κλειδιά

Containers multimap: Όμοιο με το map με τη διαφορά ότι επιτρέπονται διπλότυπα κλειδιά

Containers set: Το κλασσικό σύνολο Όμοιο με το map με τη διαφορά ότι οι ίδιες οι τιμές παίζουν και το ρόλο του κλειδιού Επιτρέπει εισαγωγή, διαγραφή και αναζήτηση με κόστος λογαριθμικό Επιτρέπει ακόμα σειριακή προσπέλαση όλων των στοιχείων Δεν επιτρέπονται διπλότυπα

Containers multiset: Όμοιο με το set με τη διαφορά ότι επιτρέπονται διπλότυπα

Algorithms Πρόκειται για πλούσια συλλογή από template C++ functions που λειτουργούν πάνω σε containers Περιλαμβάνουν Ταξινόμηση (sort, merge, min, max, ) Αναζήτηση (find, count, equal, ) Μετασχηματισμούς (transform, replace, fill, rotate, nth_element, random_shuffle, ) Πράξεις συνόλων (includes, set_difference, set_intersection, set_union, )

Iterators Οι containers προσφέρουν δυνατότητα προσπέλασης των στοιχείων τους μέσω iterators Πρόκειται για δείκτες στα στοιχεία ενός container Βοηθούν στη σάρωση όλων των στοιχείων ενός container Κάθε container ορίζει έναν ή περισσότερους τύπους iterators που μπορούμε να χρησιμοποιήσουμε

Iterators Υπάρχουν 5 τύποι: Random access Bidirectional Forward Input Output

Παράδειγμα 1 #include "stdafx.h" #include <iostream.h> #include <algorithm> #include <map> #include <string> #include <vector> using namespace std; int main(int argc, char* argv[]) { vector<string> stringvector; stringvector.push_back("yannis"); stringvector.push_back("maria"); stringvector.push_back("kostas"); stringvector.push_back("nikos"); stringvector.push_back("anna"); printall(stringvector); sort(stringvector.begin(), stringvector.end()); printall(stringvector); void printall(const vector<string> &sv) { for (int i = 0; i < sv.size(); i++) { cout << sv[i].c_str() << endl; } cout << endl; } map<string, int> positionmap; fillmap(positionmap, stringvector); printposition(positionmap, "Maria"); printposition(positionmap, "Alex"); printposition(positionmap, "Yannis"); } return 0;

Παράδειγμα 1 void fillmap(map<string, int> &themap, const vector<string> &sv) { int i = 0; for (vector<string>::const_iterator it = sv.begin(); it!= sv.end(); it++) { themap.insert(pair<string, int>(*it, i)); i++; } } void printposition(const map<string, int> &themap, string name) { map<string, int>::const_iterator it = themap.find(name); if (it == themap.end()) cerr << name.c_str() << " not found" << endl; else cout << name.c_str() << " is at position " << it->second << endl; }

Παράδειγμα 1

Παράδειγμα 2 #include "stdafx.h" #include <iostream.h> #include <algorithm> #include <list> using namespace std; int main(int argc, char* argv[]) { list<int> numberlist; numberlist.push_back(3); numberlist.push_back(4); numberlist.push_front(2); numberlist.push_front(1); numberlist.push_front(1); for (list<int>::iterator it = numberlist.begin(); it!= numberlist.end(); it++) { cout << *it << " "; } cout << endl;

Παράδειγμα 2 numberlist.unique(); for (list<int>::reverse_iterator rit = numberlist.rbegin(); rit!= numberlist.rend(); rit++) { cout << *rit << " "; } cout << endl << "/////////////////////////////" << endl; do { for (it = numberlist.begin(); it!= numberlist.end(); it++) { cout << *it << " "; } cout << endl; } while(next_permutation(numberlist.begin(), numberlist.end())); } return 0;

Παράδειγμα 2

Παράδειγμα 3 int main(int argc, char* argv[]) { vector<int> set1; vector<int> set2; vector<int> set3(10); vector<int>::iterator startit = set3.begin(); vector<int>::iterator endit; void printall(vector<int>::iterator begin, vector<int>::iterator end) { for (vector<int>::iterator it = begin; it!= end; it++) cout << *it << " "; cout << endl; } for (int i = 0; i < 10; i++) set1.push_back(i); for (i = 0; i < 10; i+=2) set2.push_back(i); endit = set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), startit); printall(startit, endit); endit = set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(), startit); printall(startit, endit); endit = set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), startit); printall(startit, endit); } return 0;

Παράδειγμα 3

Αναφορές MSDN http://en.wikipedia.org/wiki/standard_template_library http://www.mindcracker.com/mindcracker/c_cafe/stl/stlt1.asp http://www.decompile.com/html/tut.html http://dmoz.org/computers/programming/languages/c%2b%2b/class_l

Ερωτήσεις?

Ευχαριστώ