Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
cpp:stl:containers [2020/05/29 08:41] – [Προσδιορισμός εύρους στοιχείων] gthanos | cpp:stl:containers [2020/05/30 18:49] – [Αντιγραφή των στοιχείων προς ένθεση μέσα σε ένα Container] gthanos |
---|
====== Standard Template Library (STL) ====== | |
| |
H //Standard Template Libray (STL)// είναι βιβλιοθήκη της C++ που αποτελεί αναπόσπαστο τμήμα της //stardard// βιβλιοθήκης της γλώσσας. Αποτελείται από κλάσεις για προσωρινή αποθήκευση πληροφορίας σε ένα πρόγραμμα που ονομάζονται //containers//, κλάσεις για διάτρεξη των //containers// (ονομάζονται //iterators//) και αλγορίθμους. Οι αλγόριθμοι είναι συναρτήσεις που κατά κανόνα λειτουργούν με την βοήθεια των //iterators// πάνω στους διαθέσιμους //containers//. | |
| |
Βασικό χαρακτηριστικό της //STL// είναι ότι οι κλάσεις (//containers// και //iterators//) και οι συναρτήσεις των αλγορίθμων είναι γενικευμένες, ώστε να μπορούν να εφαρμοστούν με ασφάλεια σε οποιονδήποτε τύπο δεδομένων. Για να το επιτύχουν αυτό, χρησιμοποιούν [[cpp:templates|templates]]. | |
| |
===== STL Containers ===== | ===== STL Containers ===== |
=== Χρήση Copy-Constructor ή άλλου κατασκευαστή === | === Χρήση Copy-Constructor ή άλλου κατασκευαστή === |
| |
Κατά την ένθεση ενός στοιχείου σε ένα //container//, δημιουργείται πάντοτε ένα αντίγραφο του στοιχείου σε αυτόν. Για παράδειγμα, για την ένθεση στοιχείων της κλάσης [[student|Student]] μέσα σε ένα //container list// τα στοιχεία θα αντιγραφούν εντός του //list// στο τέλος της λίστας (οι μέθοδοι //insert_back// και //emplace_back// εισάγουν στο τέλος της λίστας) ως εξής: | Κατά την ένθεση ενός στοιχείου σε ένα //container//, δημιουργείται πάντοτε ένα αντίγραφο του στοιχείου σε αυτόν. Για παράδειγμα, για την ένθεση στοιχείων της κλάσης [[https://courses.e-ce.uth.gr/ECE326/doku.php?do=export_code&id=cpp:templates&codeblock=0|Student]] μέσα σε ένα //container list// τα στοιχεία θα αντιγραφούν εντός του //list// στο τέλος της λίστας (οι μέθοδοι //insert_back// και //emplace_back// εισάγουν στο τέλος της λίστας) ως εξής: |
| |
<code cpp student_list.cpp> | <code cpp student_list.cpp> |
Δείτε το παρακάτω παράδειγμα, όπου αντιγράφονται τα περιεχόμενα του πίνακα //array// αρχικά στον πίνακα //myarray// και στη συνέχεια ένα μέρος από αυτά στη λιστα //mylist//. | Δείτε το παρακάτω παράδειγμα, όπου αντιγράφονται τα περιεχόμενα του πίνακα //array// αρχικά στον πίνακα //myarray// και στη συνέχεια ένα μέρος από αυτά στη λιστα //mylist//. |
| |
<code cpp int_copy.cpp> | <code cpp int_range.cpp> |
#include <iostream> // std::cout | #include <iostream> // std::cout |
#include <algorithm> // std::copy | |
#include <list> // std::list | #include <list> // std::list |
#include <array> // std::array | #include <array> // std::array |
#include "Student.hpp" | |
#define SIZE 10 | #define SIZE 10 |
| |