| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
cpp:stl:containers_commons [2022/06/01 04:10] gthanos [Χρήση του τελεστή [ ]] |
cpp:stl:containers_commons [2022/06/01 05:49] gthanos |
| ===== Κοινά χαρακτηριστικά για όλους τους Containers ===== | ===== Συμπληρωματικοί τρόποι πρόσβασης των στοιχείων των STL Containers ===== |
| | |
| ===== Εισαγωγή των στοιχείων μέσα σε ένα Container ===== | |
| |
| Η εισαγωγή στοιχείων σε οποιονδήποτε //container// γίνεται δημιουργώντας ένα αντίγραφο του αντικειμένου προς εισαγωγή και αποθήκευση του νέου αντικείμενου στον //container//. Οι τρόποι με τους οποίους δημιουργείται το αντίγραφο περιγράφονται παρακάτω. | Η εισαγωγή στοιχείων σε οποιονδήποτε //container// γίνεται δημιουργώντας ένα αντίγραφο του αντικειμένου προς εισαγωγή και αποθήκευση του νέου αντικείμενου στον //container//. Οι τρόποι με τους οποίους δημιουργείται το αντίγραφο περιγράφονται παρακάτω. |
| std::list<Student> mylist; | std::list<Student> mylist; |
| for(int i=0; i<4; i++) { | for(int i=0; i<4; i++) { |
| mylist.push_back(students[i]); | mylist.insert(mylist.end(),students[i]); // equivalent with push_back |
| //mylist.insert(mylist.end(),students[i]); // equivalent with push_back | |
| //mylist.emplace_back(students[i].getName(), students[i].getAEM()); | |
| //mylist.emplace(mylist.end(), students[i].getName(), students[i].getAEM()); // equivalent with emplace_back | //mylist.emplace(mylist.end(), students[i].getName(), students[i].getAEM()); // equivalent with emplace_back |
| } | } |
| === Χρήση σε map και unordered_map === | === Χρήση σε map και unordered_map === |
| |
| Ο τελεστής %%[ ]%% διατίθεται σε containers τύπου map για την απεικόνιση κλειδιών σε τιμές. Όπως και παραπάνω μπορεί τόσο να διαβάσει όσο και να ανακτήσει την απεικόνιση ενός κλειδιού σε μία τιμή. Παράδειγμα προγράμματος όπου χρησιμοποιείται ο συγκεκριμένος τελεστής σε ένα map δίνεται παρακάτω: | Ο τελεστής %%[ ]%% διατίθεται σε containers τύπου map για την απεικόνιση κλειδιών σε τιμές. Όπως και παραπάνω μπορεί τόσο να ανακτήσει όσο και να καταχωρήσει μία τιμή σε ένα κλειδί. Παράδειγμα προγράμματος όπου χρησιμοποιείται ο συγκεκριμένος τελεστής δίνεται παρακάτω: |
| |
| <code cpp map_char2string.cpp> | <code cpp map_char2string.cpp> |
| {{ :cpp:stl:stl_range.png?400 |}} | {{ :cpp:stl:stl_range.png?400 |}} |
| |
| Δείτε το παρακάτω παράδειγμα, όπου αντιγράφονται τα περιεχόμενα του πίνακα //array// αρχικά στον πίνακα //myarray// και στη συνέχεια ένα μέρος από αυτά στη λιστα //mylist//. Για την αντιγραφή χρησιμοποιείται η συνάρτηση assign την οποία θα συναντήσουμε και στη συνέχεια. Η συνάρτηση assign περιέχεται μόνο σε sequence_containers και όχι σε associative ή unordered_associative containers. | Δείτε το παρακάτω παράδειγμα, όπου αντιγράφονται τα περιεχόμενα του πίνακα //array// αρχικά στον πίνακα //myarray// και στη συνέχεια ένα μέρος από αυτά στη λιστα //mylist//. Για την αντιγραφή χρησιμοποιείται η συνάρτηση assign την οποία θα συναντήσουμε και στη συνέχεια. |
| |
| <code cpp range_using_iterator.cpp> | <code cpp range_using_iterator.cpp> |
| |
| <WRAP tip 80% center round> | <WRAP tip 80% center round> |
| Η μέθοδος [[http://www.cplusplus.com/reference/list/list/assign/|assign]] δημιουργεί ένα αντίγραφο των περιεχομένων ξεκινώντας από το πρώτο όρισμα (συμπεριλαμβανομένου) έως και το δεύτερο όρισμα (μη συμπεριλαμβανομένου). Στο παραπάνω παράδειγμα ξεκινά από τη θέση **1** του πίνακα (**myarray.cbegin()+1**) έως και τη θέση **3** (**myarray.cbegin()+3**). Η θέση **myarray.cbegin()+4** που είναι το 2ο όρισμα δεν περιλαμβάνεται στο διάστημα. | Η συνάρτηση [[http://www.cplusplus.com/reference/list/list/assign/|assign]] δημιουργεί ένα αντίγραφο των περιεχομένων ξεκινώντας από το πρώτο όρισμα (συμπεριλαμβανομένου) έως και το δεύτερο όρισμα (μη συμπεριλαμβανομένου). Στο παραπάνω παράδειγμα ξεκινά από τη θέση **1** του πίνακα (**myarray.cbegin()+1**) έως και τη θέση **3** (**myarray.cbegin()+3**). Η θέση **myarray.cbegin()+4** που είναι το 2ο όρισμα δεν περιλαμβάνεται στο διάστημα. |
| | |
| | Η συνάρτηση [[http://www.cplusplus.com/reference/list/list/assign/|assign]] είναι διαθέσιμη μόνο για sequence_containers και όχι για associative ή unordered_associative containers (όπως //set,map,unordered_set,unordered_map//). |
| </WRAP> | </WRAP> |
| |
| Όπως θα δούμε στη συνέχεια, οι //iterators// της //STL// διατρέχουν οποιαδήποτε δομή από τη θέση //begin()// (δείκτης στην πρώτη θέση περιεχομένων του //container//) έως //end()// (δείκτης αμέσως μετά την τελευταία θέση περιεχομένων του //container//). | Όπως θα δούμε στη συνέχεια, οι //iterators// της //STL// διατρέχουν οποιαδήποτε δομή από τη θέση //begin()// (δείκτης στην πρώτη θέση περιεχομένων του //container//) έως //end()// (δείκτης αμέσως μετά την τελευταία θέση περιεχομένων του //container//). |
| |