Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
cpp:stl:containers [2020/05/30 18:49] – [Αντιγραφή των στοιχείων προς ένθεση μέσα σε ένα Container] gthanos | cpp:stl:containers [2020/05/30 19:12] – gthanos |
---|
| |
===== STL Containers ===== | ====== STL Containers ====== |
| |
Στο παρακάτω διάγραμμα περιέχονται το σύνολο των //containers// που παρέχει η βιβλιοθήκη //STL//. | Στο παρακάτω διάγραμμα περιέχονται το σύνολο των //containers// που παρέχει η βιβλιοθήκη //STL//. |
mylist.push_back(students[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].name, students[i].aem); | //mylist.emplace_back(students[i].getName(), students[i].getAEM()); |
//mylist.emplace(mylist.end(), students[i].name, students[i].aem); // equivalent with emplace_back | //mylist.emplace(mylist.end(), students[i].getName(), students[i].getAEM()); // equivalent with emplace_back |
} | } |
| |
Κατά την εισαγωγή ενός στοιχείου μέσω των συναρτήσεων //insert//, //insert_back//, //emplace//, //emplace_back// δημιουργείται πάντα ένα νέο αντικείμενο στον //container//. Η δημιουργία του αντικείμένου γίνεται είτε μέσω του copy-constructor (μέθοδοι //insert//, //insert_back//) ή μέσω εκείνου του κατασκευαστή που λαμβάνει ως παραμέτρους τους τύπους των ορισμάτων που περνιούνται στις μεθόδους //emplace// ή //emplace_back//. Στο παράδειγμα μας, τα αντικείμενα κατασκευάζονται με τη βοήθεια του κατασκευαστή ''Student(const char *name, int aem)''. | Κατά την εισαγωγή ενός στοιχείου μέσω των συναρτήσεων //insert//, //insert_back//, //emplace//, //emplace_back// δημιουργείται πάντα ένα νέο αντικείμενο στον //container//. Η δημιουργία του αντικείμένου γίνεται είτε μέσω του copy-constructor (μέθοδοι //insert//, //insert_back//) ή μέσω εκείνου του κατασκευαστή που λαμβάνει ως παραμέτρους τους τύπους των ορισμάτων που περνιούνται στις μεθόδους //emplace// ή //emplace_back//. Στο παράδειγμα μας, τα αντικείμενα κατασκευάζονται με τη βοήθεια του κατασκευαστή ''Student(const char *name, int aem)''. |
| |
=== Χρήση operator= === | === Χρήση operator = === |
| |
Αντιστοίχως, στο παρακάτω πρόγραμμα ανατίθεται σε ένα //container// τύπου //array// περιεχόμενα μέσω του τελεστή %%[]%%. Μεταγλωττίζοντας και εκτελώντας το πρόγραμμα θα παρατηρήσετε ότι καλείται ο τελεστής %%=%% (//operator=//) της κλάσης //Student//. | Αντιστοίχως, στο παρακάτω πρόγραμμα ανατίθεται σε ένα //container// τύπου //array// περιεχόμενα μέσω του τελεστή %%[]%%. Μεταγλωττίζοντας και εκτελώντας το πρόγραμμα θα παρατηρήσετε ότι καλείται ο τελεστής %%=%% (//operator=//) της κλάσης //Student//. |
| |
<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ο όρισμα δεν περιλαμβάνεται στο διάστημα. |
</WRAP> | </WRAP> |
| |
Σε αναλογία μετα παραπάνω, όπως θα δούμε στη συνέχεια, οι //iterators// της //STL// διατρέχουν οποιαδήποτε δομή από τη θέση //begin()// (δείκτης στην πρώτη θέση περιεχομένων του //container//) έως //end()// (δείκτης αμέσως μετά την τελευταία θέση περιεχομένων του //container//). | Σε αναλογία μετα παραπάνω, όπως θα δούμε στη συνέχεια, οι //iterators// της //STL// διατρέχουν οποιαδήποτε δομή από τη θέση //begin()// (δείκτης στην πρώτη θέση περιεχομένων του //container//) έως //end()// (δείκτης αμέσως μετά την τελευταία θέση περιεχομένων του //container//). |
| |