Τι είναι η λίστα std ::;
Στο C ++, η λίστα std :: αναφέρεται σε ένα κοντέινερ αποθήκευσης. Η λίστα std: σας επιτρέπει να εισάγετε και να αφαιρείτε αντικείμενα από οπουδήποτε. Η λίστα std :: υλοποιείται ως λίστα διπλής σύνδεσης. Αυτό σημαίνει ότι τα δεδομένα λίστας μπορούν να προσπελαστούν αμφίδρομα και διαδοχικά.
Η λίστα Τυπική βιβλιοθήκη προτύπων δεν υποστηρίζει γρήγορη τυχαία πρόσβαση, αλλά υποστηρίζει διαδοχική πρόσβαση από όλες τις κατευθύνσεις.
Μπορείτε να διασκορπίσετε στοιχεία λίστας σε διαφορετικά κομμάτια μνήμης. Οι πληροφορίες που απαιτούνται για τη διαδοχική πρόσβαση σε δεδομένα αποθηκεύονται σε ένα κοντέινερ. Η λίστα std :: μπορεί να επεκταθεί και να συρρικνωθεί και από τα δύο άκρα, όπως απαιτείται κατά τη διάρκεια του χρόνου εκτέλεσης. Ένας εσωτερικός εκχωρητής πληροί αυτόματα τις απαιτήσεις αποθήκευσης.
Σε αυτό το σεμινάριο C ++, θα μάθετε:
- Τι είναι η λίστα std ::;
- Γιατί να χρησιμοποιήσετε το std :: list;
- Σύνταξη λίστας
- Λειτουργίες λίστας C ++
-
- Κατασκευαστές
- Ιδιότητες κοντέινερ
- Εισαγωγή σε λίστα
- Διαγραφή από μια λίστα
Γιατί να χρησιμοποιήσετε το std :: list;
Εδώ είναι λόγοι για τη χρήση του std :: List:
- Η λίστα std :: συγκρίνεται καλύτερα με άλλα κοντέινερ ακολουθίας όπως πίνακας και διάνυσμα.
- Έχουν καλύτερη απόδοση στην εισαγωγή, μετακίνηση και εξαγωγή στοιχείων από οποιαδήποτε θέση.
- Η λίστα std :: λειτουργεί επίσης καλύτερα με αλγόριθμους που εκτελούν εντατικά τέτοιες λειτουργίες.
Σύνταξη λίστας
Για να ορίσουμε τη λίστα std ::, πρέπει να εισαγάγουμε το αρχείο κεφαλίδας
. Εδώ είναι η σύνταξη ορισμού λίστας std :: list:
template < class Type, class Alloc =allocator> class list;
Ακολουθεί μια περιγραφή των παραπάνω παραμέτρων:
- T - Ορίζει τον τύπο του στοιχείου που περιέχεται.
Μπορείτε να αντικαταστήσετε το T με οποιονδήποτε τύπο δεδομένων, ακόμη και τύπους που καθορίζονται από το χρήστη.
- Alloc - Καθορίζει τον τύπο του αντικειμένου κατανομής.
Αυτό χρησιμοποιεί το πρότυπο κλάσης κατανομής από προεπιλογή. Εξαρτάται από την αξία και χρησιμοποιεί ένα απλό μοντέλο κατανομής μνήμης.
Παραδείγματα 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Παραγωγή:
Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας αλγορίθμου για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας λίστας για να χρησιμοποιήσετε τις λειτουργίες του.
- Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της λειτουργίας.
- Δημιουργήστε μια λίστα με το όνομα my_list με ένα σύνολο 4 ακέραιων αριθμών.
- Χρησιμοποιήστε ένα για βρόχο για να δημιουργήσετε μια μεταβλητή βρόχου x. Αυτή η μεταβλητή θα χρησιμοποιηθεί για την επανάληψη των στοιχείων της λίστας.
- Εκτυπώστε τις τιμές της λίστας στην κονσόλα.
- Τέλος του σώματος του βρόχου.
- Τέλος του σώματος της κύριας () συνάρτησης.
Λειτουργίες λίστας C ++
Εδώ είναι οι κοινές συναρτήσεις std :: list:
Λειτουργία | Περιγραφή |
εισάγετε() | Αυτή η συνάρτηση εισάγει ένα νέο στοιχείο πριν από τη θέση που δείχνει ο επαναληπτής. |
push_back () | Αυτές οι λειτουργίες προσθέτουν ένα νέο στοιχείο στο τέλος της λίστας. |
push_front () | Προσθέτει ένα νέο στοιχείο στο μπροστινό μέρος της λίστας. |
pop_front () | Διαγράφει το πρώτο στοιχείο της λίστας. |
Μέγεθος() | Αυτή η συνάρτηση καθορίζει τον αριθμό των στοιχείων λίστας. |
εμπρός() | Για να καθορίσει τα πρώτα στοιχεία της λίστας. |
πίσω() | Για να καθορίσει το τελευταίο στοιχείο της λίστας. |
ΑΝΤΙΣΤΡΟΦΗ() | Αντιστρέφει τα στοιχεία της λίστας. |
συγχώνευση() | Συγχωνεύει δύο ταξινομημένες λίστες. |
Κατασκευαστές
Εδώ είναι η λίστα των συναρτήσεων που παρέχονται από το αρχείο κεφαλίδας
:
- Προεπιλεγμένος κατασκευαστής std :: list :: list () - Δημιουργεί μια κενή λίστα, με μηδενικά στοιχεία.
- Συμπληρώστε τον κατασκευαστή std :: list :: list () - Δημιουργεί μια λίστα με στοιχεία n και εκχωρεί τιμή μηδέν (0) σε κάθε στοιχείο.
- Range constructor std :: list :: list () - δημιουργεί μια λίστα με πολλά στοιχεία στην περιοχή από το πρώτο έως το τελευταίο.
- Αντιγραφή κατασκευαστή std :: list :: list () - Δημιουργεί μια λίστα με ένα αντίγραφο κάθε στοιχείου που περιέχεται στην υπάρχουσα λίστα.
- Move constructor std :: list :: list () - δημιουργεί μια λίστα με τα στοιχεία μιας άλλης λίστας χρησιμοποιώντας μετακίνηση σημασιολογίας.
- Initializer list buildor std :: list :: list () - Δημιουργεί μια λίστα με τα στοιχεία μιας άλλης λίστας χρησιμοποιώντας μετακίνηση σημασιολογίας.
Παράδειγμα 2:
#include#include using namespace std;int main(void) {list
l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list l3(move(l1));cout << "Size of list l: " << l.size() << endl;cout << "List l2 contents: " << endl;for (auto it = l2.begin(); it != l2.end(); ++it)cout << *it << endl;cout << "List l3 contents: " << endl;for (auto it = l3.begin(); it != l3.end(); ++it)cout << *it << endl;return 0;}
Παραγωγή:
Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας λίστας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικα για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
- Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της λειτουργίας.
- Δημιουργήστε μια κενή λίστα με το όνομα l.
- Δημιουργήστε μια λίστα με το όνομα l1 με ένα σύνολο 3 ακέραιων αριθμών.
- Δημιουργήστε μια λίστα με το όνομα l2 με όλα τα στοιχεία στη λίστα με το όνομα l1, από την αρχή έως το τέλος.
- Δημιουργήστε μια λίστα με το όνομα l3 χρησιμοποιώντας σημασιολογία μετακίνησης. Η λίστα l3 θα έχει το ίδιο περιεχόμενο με τη λίστα l2.
- Εκτυπώστε το μέγεθος της λίστας με το όνομα l στην κονσόλα μαζί με άλλο κείμενο.
- Εκτυπώστε λίγο κείμενο στην κονσόλα.
- Δημιουργήστε έναν επαναληπτή που το ονόμασε και χρησιμοποιήστε το για να επαναλάβετε τα στοιχεία της λίστας με το όνομα l2.
- Εκτυπώστε τα στοιχεία της λίστας με την ονομασία l2 στην κονσόλα.
- Εκτυπώστε λίγο κείμενο στην κονσόλα.
- Δημιουργήστε έναν επαναληπτή που το ονόμασε και χρησιμοποιήστε το για να επαναλάβετε τα στοιχεία της λίστας με το όνομα l3.
- Εκτυπώστε τα στοιχεία της λίστας με την ονομασία l3 στην κονσόλα.
- Το πρόγραμμα πρέπει να επιστρέψει την τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του σώματος της κύριας () συνάρτησης.
Ιδιότητες κοντέινερ
Εδώ είναι η λίστα των ιδιοτήτων κοντέινερ:
Ιδιοκτησία | Περιγραφή |
Αλληλουχία | Τα εμπορευματοκιβώτια ακολουθίας ταξινομούν τα στοιχεία τους σε αυστηρή γραμμική σειρά. Τα στοιχεία έχουν πρόσβαση από τη θέση τους στη σειρά. |
Διπλά συνδεδεμένη λίστα | Κάθε στοιχείο έχει πληροφορίες για τον εντοπισμό προηγούμενων και επόμενων στοιχείων. Αυτό επιτρέπει σταθερό χρόνο για εργασίες εισαγωγής και διαγραφής. |
Κατανοητής | Ένα αντικείμενο κατανομής χρησιμοποιείται για την δυναμική τροποποίηση του μεγέθους αποθήκευσης. |
Εισαγωγή σε λίστα
Υπάρχουν διαφορετικές λειτουργίες που μπορούμε να χρησιμοποιήσουμε για να εισαγάγουμε τιμές σε μια λίστα. Ας το δείξουμε:
Παράδειγμα 3:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };my_list.push_front(11);my_list.push_back(18);auto it = std::find(my_list.begin(), my_list.end(), 10);if (it != my_list.end()) {my_list.insert(it, 21);}for (int x : my_list) {std::cout << x << '\n';}}
Παραγωγή:
Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας αλγορίθμου για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας λίστας για να χρησιμοποιήσετε τις λειτουργίες του.
- Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της λειτουργίας.
- Δημιουργήστε μια λίστα με το όνομα my_list με ένα σύνολο 4 ακέραιων αριθμών.
- Εισαγάγετε το στοιχείο 11 στο μπροστινό μέρος της λίστας που ονομάζεται my_list.
- Εισαγάγετε το στοιχείο 18 στο τέλος της λίστας που ονομάζεται my_list.
- Δημιουργήστε έναν επαναληπτικό και χρησιμοποιήστε το για να βρείτε το στοιχείο 10 από τη λίστα my_list.
- Χρησιμοποιήστε μια δήλωση if για να προσδιορίσετε εάν το παραπάνω στοιχείο βρέθηκε ή όχι.
- Εισαγάγετε το στοιχείο 21 πριν από το παραπάνω στοιχείο εάν βρέθηκε.
- Τέλος του σώματος της δήλωσης if.
- Χρησιμοποιήστε ένα για βρόχο για να δημιουργήσετε μια μεταβλητή βρόχου x. Αυτή η μεταβλητή θα χρησιμοποιηθεί για την επανάληψη των στοιχείων της λίστας.
- Εκτυπώστε τις τιμές της λίστας στην κονσόλα.
- Τέλος του σώματος του βρόχου.
- Τέλος του σώματος της κύριας () συνάρτησης.
Διαγραφή από μια λίστα
Είναι δυνατή η διαγραφή στοιχείων από μια λίστα. Η λειτουργία διαγραφής () σάς επιτρέπει να διαγράψετε ένα στοιχείο ή μια σειρά αντικειμένων από μια λίστα.
- Για να διαγράψετε ένα μεμονωμένο στοιχείο, απλώς περνάτε μια ακέραια θέση. Το στοιχείο θα διαγραφεί.
- Για να διαγράψετε ένα εύρος, περνάτε τους αρχικούς και τους τελικούς επαναληπτικούς. Ας το δείξουμε.
Παράδειγμα 4:
#include#include #include using namespace std;int main() {std::list
my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list ::iterator i = my_list.begin();my_list.erase(i);cout << "\nList elements after deletion: ";for (int x : my_list) {std::cout << x << '\n';}return 0;}
Παραγωγή:
Εδώ είναι το στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας αλγορίθμου για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το αρχείο κεφαλίδας λίστας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το std namespace στο πρόγραμμά μας για να χρησιμοποιήσετε τις τάξεις του χωρίς να το καλέσετε.
- Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της λειτουργίας.
- Δημιουργήστε μια λίστα με το όνομα my_list με ένα σύνολο 4 ακέραιων αριθμών.
- Εκτυπώστε λίγο κείμενο στην κονσόλα.
- Χρησιμοποιήστε ένα για βρόχο για να δημιουργήσετε μια μεταβλητή βρόχου x. Αυτή η μεταβλητή θα χρησιμοποιηθεί για την επανάληψη των στοιχείων της λίστας.
- Εκτυπώστε τις τιμές της λίστας στην κονσόλα.
- Άκρο του σώματος του βρόχου για.
- Δημιουργήστε έναν επαναληπτικό i που δείχνει το πρώτο στοιχείο της λίστας.
- Χρησιμοποιήστε τη συνάρτηση erase () που υποδεικνύεται από τον επαναληπτικό i.
- Εκτυπώστε λίγο κείμενο στην κονσόλα.
- Χρησιμοποιήστε ένα για βρόχο για να δημιουργήσετε μια μεταβλητή βρόχου x. Αυτή η μεταβλητή θα χρησιμοποιηθεί για την επανάληψη των στοιχείων της λίστας.
- Εκτυπώστε τις τιμές της λίστας στην κονσόλα. Αυτό έρχεται μετά τη διαγραφή.
- Άκρο του σώματος του βρόχου για.
- Το πρόγραμμα πρέπει να επιστρέψει μια τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του σώματος της κύριας () συνάρτησης.
Περίληψη:
- Η λίστα std :: είναι ένα κοντέινερ αποθήκευσης.
- Επιτρέπει την εισαγωγή και διαγραφή αντικειμένων από οπουδήποτε σε σταθερή ώρα.
- Εφαρμόζεται ως διπλός-σύνδεσμος
- Τα δεδομένα std :: list μπορούν να προσπελαστούν αμφίδρομα και διαδοχικά.
- std :: list δεν υποστηρίζει γρήγορη τυχαία πρόσβαση. Ωστόσο, υποστηρίζει διαδοχική πρόσβαση από όλες τις κατευθύνσεις.
- Μπορείτε να διασκορπίσετε τα στοιχεία λίστας του std :: list σε διαφορετικά κομμάτια μνήμης.
- Μπορείτε να συρρικνώσετε ή να αναπτύξετε τη λίστα std :: και από τα δύο άκρα, όπως απαιτείται κατά τη διάρκεια του χρόνου εκτέλεσης.
- Για να εισαγάγετε αντικείμενα στη λίστα std ::, χρησιμοποιούμε τη συνάρτηση insert ().
- Για τη διαγραφή στοιχείων από τη λίστα std ::, χρησιμοποιούμε τη συνάρτηση erase ().