| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
cpp:stl:container_common_functions [2022/06/01 04:23] gthanos |
cpp:stl:container_common_functions [2023/05/29 17:09] gthanos [Εισαγωγή στοιχείου] |
| ===== Εισαγωγή στοιχείου ===== | ===== Εισαγωγή στοιχείου ===== |
| |
| Με εξαίρεση την κλάση [[array|std::array]] που το μέγεθος των πινάκων που δημιουργεί είναι σταθερό και δηλώνεται κατά τη δήλωση του πίνακα, οι υπόλοιποι //containers// μπορούν να μεταβάλλουν το αριθμό των στοιχείων που αποθηκεύουν. Για την εισαγωγή ενός στοιχείου σε έναν //container// υπάρχουν οι συναρτήσεις //insert// για την εισαγωγή ενός αντιγράφου του στοιχείου στον container και //emplace// για την δημιουργία ενός αντικειμένου και εισαγωγή του στον //container//. Επιπλέον, μόνο για τους //sequence containers// η //insert// λαμβάνει ως πρώτο όρισμα έναν //iterator// που δηλώνει τη θέση εισαγωγής του στοιχείου στον container. Για τις υπόλοιπες κατηγορίες //containers//, η //insert// δεν λαμβάνει ως πρώτο όρισμα έναν //iterator// (εάν λαμβάνει, αυτό είναι ενδεικτικό και καλό είναι να αποφεύγετε η χρήση του). | Με εξαίρεση την κλάση [[array|std::array]] που το μέγεθος των πινάκων που δημιουργεί είναι σταθερό και δηλώνεται κατά τη δήλωση του πίνακα, οι υπόλοιποι //containers// μπορούν να μεταβάλλουν το αριθμό των στοιχείων που αποθηκεύουν. Για την εισαγωγή ενός στοιχείου σε έναν //container// υπάρχουν οι συναρτήσεις //insert// για την εισαγωγή ενός αντιγράφου του στοιχείου στον container και //emplace// για την δημιουργία ενός αντικειμένου και εισαγωγή του στον //container//. Επιπλέον, μόνο για τους //sequence containers// η //insert// λαμβάνει ως πρώτο όρισμα έναν //iterator// που δηλώνει τη θέση εισαγωγής του στοιχείου στον container. Για τις υπόλοιπες κατηγορίες //containers//, η //insert// δε λαμβάνει ως πρώτο όρισμα έναν //iterator// (υπάρχουν περιπτώσεις που λαμβάνει, αλλά αυτό είναι ενδεικτικό και συνιστάται να αποφεύγετε τη χρήση του). |
| |
| Παραδείγματα: | Παραδείγματα: |
| } | } |
| </code> | </code> |
| | |
| | <WRAP tip 80% center round> |
| | Η διαφορά ανάμεσα στις μεθόδους //insert// και //emplace// είναι η εξής: |
| | * Στη μέθοδο //insert// παρέχουμε ένα αντικείμενο και η μέθοδος κατασκευάζει ένα αντίγραφο του μέσω του κατασκευαστή αντιγραφέα (copy-constructor) της κλάσης //Student//. |
| | * Στη μέθοδο //empace// παρέχουμε τα ορίσματα μέσω των οποίων κατασκευάζεται ένα αντικείμενο τύπου Student, μέσω του κατασκευαστή ''Student(const char *name, int aem);''. |
| | </WRAP> |
| |
| ==== Β. Ένθεση σε set, unordered set ==== | ==== Β. Ένθεση σε set, unordered set ==== |
| Student students[] = { Student("Peter_Pan", 1234), Student("Tinker_Bell", 1235) }; | Student students[] = { Student("Peter_Pan", 1234), Student("Tinker_Bell", 1235) }; |
| | |
| std::cerr << "----- Init list -----" << std::endl; | std::cerr << "----- Init set -----" << std::endl; |
| std::set<Student> mylist; | std::set<Student> myset; |
| for(int i=0; i<2; i++) { | for(int i=0; i<2; i++) { |
| mylist.insert(students[i]); // copy-constructor, insert first | myset.insert(students[i]); // copy-constructor, insert first |
| mylist.insert(students[i]); // copy-constructor, insert last | myset.insert(students[i]); // copy-constructor, insert last |
| } | } |
| | |
| mylist.emplace("Mickey_Mouse", 1237); // argument construct, insert last | myset.emplace("Mickey_Mouse", 1237); // argument construct, insert last |
| | |
| std::cerr << "-------------------------\n"; | std::cerr << "-------------------------\n"; |
| std::cerr << "mylist contains:"; | std::cerr << "myset contains:"; |
| for (std::set<Student>::iterator it = mylist.begin(); it!=mylist.end(); ++it) | for (std::set<Student>::iterator it = myset.begin(); it!=myset.end(); ++it) |
| std::cerr << ' ' << *it; | std::cerr << ' ' << *it; |
| std::cerr << std::endl; | std::cerr << std::endl; |
| if(it != myset.end()) { | if(it != myset.end()) { |
| myset.erase (it); | myset.erase (it); |
| std::cout << "'buiscuits' erased\n"; | std::cout << "'biscuits' erased\n"; |
| } | } |
| else | else |
| std::cout << "'buiscuits' not found\n"; | std::cout << "'biscuits' not found\n"; |
| | |
| print_set(myset); | print_set(myset); |
| |
| int main () { | int main () { |
| vector<int> v; | vector<int> v = {1,2,3}; |
| array<int,6> a = {10, 20, 30, 40, 50, 60}; | array<int,6> a = {10, 20, 30, 40, 50, 60}; |
| | |
| |
| <WRAP tip 80% center round> | <WRAP tip 80% center round> |
| H συνάρτηση //assign// διαγράφει τα υφιστάμενα περιεχόμενα του //container// πριν ανάθεση των νέων περιεχομένων. Προσαρμόζει το μέγεθος του //container// ανάλογα με τον αριθμό των στοιχείων που θα εισάγει σε αυτόν. | H συνάρτηση //assign// διαγράφει τα υφιστάμενα περιεχόμενα του //container// πριν ανάθεση των νέων περιεχομένων. Επιπλέον, προσαρμόζει το μέγεθος του //container// ανάλογα με τον αριθμό των στοιχείων που θα εισάγει σε αυτόν. |
| </WRAP> | </WRAP> |