User Tools

Site Tools


cpp:stl:container_common_functions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
cpp:stl:container_common_functions [2022/06/01 04:23] gthanoscpp:stl:container_common_functions [2023/05/30 19:13] – [A. Διαγραφή από λίστα] gthanos
Line 1: Line 1:
-====== Κοινές συναρτήσεις για όλους τους containers ======+====== Κοινές συναρτήσεις για περισσότερους του ενός containers ======
  
 ===== Εισαγωγή στοιχείου ===== ===== Εισαγωγή στοιχείου =====
  
-Με εξαίρεση την κλάση [[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// (υπάρχουν περιπτώσεις που λαμβάνει, αλλά αυτό είναι ενδεικτικό και συνιστάται να αποφεύγετε τη χρήση του).
  
 Παραδείγματα: Παραδείγματα:
Line 39: Line 39:
  
 </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 ====
Line 53: Line 59:
   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;
Line 115: Line 121:
  
   return 0;   return 0;
 +}
 </code> </code>
  
Line 269: Line 276:
   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);
Line 306: Line 313:
  
 int main () { int main () {
-  vector<int> v;+  vector<int>= {1,2,3};
   array<int,6> a = {10, 20, 30, 40, 50, 60};   array<int,6> a = {10, 20, 30, 40, 50, 60};
      
Line 320: Line 327:
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
-H συνάρτηση //assign// διαγράφει τα υφιστάμενα περιεχόμενα του //container// πριν ανάθεση των νέων περιεχομένων. Προσαρμόζει το μέγεθος του //container// ανάλογα με τον αριθμό των στοιχείων που θα εισάγει σε αυτόν.+H συνάρτηση //assign// διαγράφει τα υφιστάμενα περιεχόμενα του //container// πριν ανάθεση των νέων περιεχομένων. Επιπλέον, προσαρμόζει το μέγεθος του //container// ανάλογα με τον αριθμό των στοιχείων που θα εισάγει σε αυτόν.
 </WRAP> </WRAP>
cpp/stl/container_common_functions.txt · Last modified: 2023/05/30 19:18 by gthanos