Διάνυσμα στην τυπική βιβλιοθήκη προτύπων C ++ (STL) με παράδειγμα

Πίνακας περιεχομένων:

Anonim

Τι είναι ένας φορέας C ++;

Το C ++ VECTOR είναι μια δυναμική συστοιχία ικανή να αλλάξει το μέγεθος αυτόματα. Το μέγεθος αλλάζει μετά την προσθήκη ή τη διαγραφή ενός στοιχείου από τον φορέα. Η αποθήκευση χειρίζεται αυτόματα από το δοχείο. Τα στοιχεία ενός διανύσματος αποθηκεύονται σε συνεχόμενη αποθήκευση. Αυτό επιτρέπει στους προγραμματιστές C ++ να έχουν πρόσβαση και να διασχίζουν τα διανυσματικά στοιχεία χρησιμοποιώντας iterators.

Η εισαγωγή νέων δεδομένων σε ένα φορέα γίνεται στο τέλος του. Αυτό απαιτεί διαφορετικό χρόνο. Η αφαίρεση ενός στοιχείου από έναν φορέα απαιτεί σταθερό χρόνο. Ο λόγος είναι ότι δεν υπάρχει ανάγκη αλλαγής μεγέθους του διανύσματος. Η εισαγωγή ή διαγραφή ενός στοιχείου στην αρχή του διανύσματος απαιτεί γραμμικό χρόνο.

Σε αυτό το σεμινάριο C ++, θα μάθετε:

  • Τι είναι ένας φορέας C ++;
  • Πότε να χρησιμοποιήσετε ένα διάνυσμα;
  • Πώς να αρχικοποιήσετε τα διανύσματα στο C ++
  • Επαναληπτές
  • Τροποποιητές
  • Παράδειγμα 1
  • Παράδειγμα 2
  • Χωρητικότητα
  • Παράδειγμα 3

Πότε να χρησιμοποιήσετε ένα διάνυσμα;

Ένας φορέας C ++ πρέπει να χρησιμοποιείται υπό τις ακόλουθες συνθήκες:

  • Όταν ασχολείστε με στοιχεία δεδομένων που αλλάζουν με συνέπεια.
  • Εάν το μέγεθος των δεδομένων δεν είναι γνωστό πριν από την έναρξη, το διάνυσμα δεν θα σας ζητήσει να ορίσετε το μέγιστο μέγεθος του κοντέινερ.

Πώς να αρχικοποιήσετε τα διανύσματα στο C ++

Η σύνταξη των διανυσμάτων στο C ++ είναι:

vector  name (items)
  • Όπως φαίνεται παραπάνω, ξεκινάμε με τη διανυσματική λέξη-κλειδί.
  • Ο τύπος δεδομένων είναι ο τύπος δεδομένων των στοιχείων που θα αποθηκευτούν στο διάνυσμα.
  • Το όνομα είναι το όνομα του διανύσματος ή των στοιχείων δεδομένων.
  • Τα στοιχεία δηλώνουν τον αριθμό των στοιχείων για τα δεδομένα του φορέα. Αυτή η παράμετρος είναι προαιρετική.

Επαναληπτές

Ο σκοπός των επαναληπτών είναι να μας βοηθήσει να αποκτήσουμε πρόσβαση στα στοιχεία που είναι αποθηκευμένα σε ένα διάνυσμα. Είναι ένα αντικείμενο που λειτουργεί σαν δείκτης. Ακολουθούν οι συνηθισμένοι επαναληπτικοί φορείς που υποστηρίζονται από διανύσματα C ++:

  • vector :: begin (): δίνει έναν επαναληπτικό που δείχνει το πρώτο στοιχείο του διανύσματος.
  • vector :: end (): δίνει έναν επαναληπτικό που δείχνει το στοιχείο παρελθόντος του διανύσματος.
  • vector :: cbegin (): είναι το ίδιο με το vector :: begin (), αλλά δεν έχει τη δυνατότητα τροποποίησης στοιχείων.
  • vector :: cend (): είναι το ίδιο με το vector :: end () αλλά δεν μπορεί να τροποποιήσει διανυσματικά στοιχεία.

Τροποποιητές

Οι τροποποιητές χρησιμοποιούνται για την αλλαγή της σημασίας του καθορισμένου τύπου δεδομένων. Εδώ είναι οι συνηθισμένοι τροποποιητές στο C ++:

  • vector :: push_back (): Αυτός ο τροποποιητής ωθεί τα στοιχεία από το πίσω μέρος.
  • vector :: insert (): Για εισαγωγή νέων αντικειμένων σε ένα φορέα σε μια καθορισμένη τοποθεσία.
  • vector :: pop_back (): Αυτός ο τροποποιητής αφαιρεί τα στοιχεία φορέα από το πίσω μέρος.
  • vector :: erase (): Χρησιμοποιείται για την αφαίρεση ενός εύρους στοιχείων από την καθορισμένη τοποθεσία.
  • vector :: clear (): Καταργεί όλα τα διανυσματικά στοιχεία.

Παράδειγμα 1

#include #include using namespace std;int main(){vector nums;for (int a = 1; a <= 5; a++)nums.push_back(a);cout << "Output from begin and end: ";for (auto a = nums.begin(); a != nums.end(); ++a)cout << *a << " ";cout << "\nOutput from cbegin and cend: ";for (auto a = nums.cbegin(); a != nums.cend(); ++a)cout << *a << " ";return 0;}

Παραγωγή:

Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:

Επεξήγηση κώδικα:

  1. Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας. Θα μας επιτρέψει να διαβάσουμε και να γράψουμε στην κονσόλα.
  2. Συμπεριλάβετε το διανυσματικό αρχείο κεφαλίδας στον κώδικά μας. Θα μας επιτρέψει να συνεργαστούμε με διανύσματα στο C ++.
  3. Συμπεριλάβετε το χώρο ονομάτων std έτσι ώστε να χρησιμοποιείτε τις κλάσεις και τις λειτουργίες του χωρίς να το καλείτε.
  4. Καλέστε την κύρια () συνάρτηση μέσα στην οποία πρέπει να προστεθεί η λογική του προγράμματος.
  5. Το {σηματοδοτεί την έναρξη του σώματος της κύριας συνάρτησης ().
  6. Δηλώστε ένα διάνυσμα που ονομάζεται nums για να αποθηκεύσετε ένα σύνολο ακέραιων αριθμών.
  7. Δημιουργήστε ένα βρόχο για να μας βοηθήσετε να επαναλάβουμε το διάνυσμα. Η μεταβλητή θα μας βοηθήσει να επαναλάβουμε τα διανυσματικά στοιχεία, από το 1ο έως το 5ο στοιχείο.
  8. Σπρώξτε τα στοιχεία στον αριθμό του φορέα από το πίσω μέρος. Για κάθε επανάληψη, αυτό θα προσθέσει την τρέχουσα τιμή της μεταβλητής α στο διάνυσμα, που είναι 1 έως 5.
  9. Εκτυπώστε λίγο κείμενο στην κονσόλα
  10. Χρησιμοποιήστε μια μεταβλητή a iterator για να επαναλάβετε τα στοιχεία των διανυσματικών αριθμών από την αρχή έως το παρελθόν. Σημειώστε ότι χρησιμοποιούμε τους επαναληπτές vector :: begin () και vector :: end ().
  11. Εκτυπώστε τις τιμές που δείχνει η μεταβλητή iterator στην κονσόλα για κάθε επανάληψη.
  12. Εκτυπώστε λίγο κείμενο στην κονσόλα. Το \ n είναι ένας νέος χαρακτήρας γραμμής, μετακινώντας τον κέρσορα στη νέα γραμμή για εκτύπωση από εκεί.
  13. Χρησιμοποιήστε μια μεταβλητή επανάληψης για να επαναλάβετε τα στοιχεία των διανυσματικών αριθμών από την αρχή έως το παρελθόν. Σημειώστε ότι χρησιμοποιούμε επαναληπτικούς διανύσματα :: cbegin () και vector :: cend ().
  14. Εκτυπώστε τις τιμές που επισημαίνονται από τη μεταβλητή iterator στην κονσόλα για κάθε επανάληψη.
  15. Η κύρια συνάρτηση θα πρέπει να επιστρέφει μια τιμή εάν το πρόγραμμα εκτελείται με επιτυχία.
  16. Τέλος του σώματος της κύριας () συνάρτησης.

Παράδειγμα 2

#include #include using namespace std;int main(){vector nums;nums.assign(5, 1);cout << "Vector contents: ";for (int a = 0; a < nums.size(); a++)cout << nums[a] << " ";nums.push_back(2);int n = nums.size();cout << "\nLast element: " << nums[n - 1];nums.pop_back();cout << "\nVector contents: ";for (int a = 0; a < nums.size(); a++)cout << nums[a] << " ";nums.insert(nums.begin(), 7);cout << "\nFirst element: " << nums[0];nums.clear();cout << "\nSize after clear(): " << nums.size();}

Παραγωγή:

Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:

Επεξήγηση κώδικα:

  1. Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  2. Συμπεριλάβετε το διανυσματικό αρχείο κεφαλίδας στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  3. Συμπεριλάβετε το χώρο ονομάτων std για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
  4. Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα του.
  5. Η έναρξη του σώματος της κύριας () συνάρτησης.
  6. Δηλώστε ένα διάνυσμα που ονομάζεται nums για να αποθηκεύσετε μερικές ακέραιες τιμές.
  7. Αποθηκεύστε 5 στοιχεία στους αριθμούς του διανύσματος. Το καθένα με τιμή 1.
  8. Εκτυπώστε λίγο κείμενο στην κονσόλα
  9. Χρησιμοποιήστε μια επαναληπτική μεταβλητή α για να επαναλάβετε τα στοιχεία των διανυσματικών αριθμών.
  10. Εκτυπώστε τις τιμές των διανυσματικών αριθμών στην κονσόλα για κάθε επανάληψη.
  11. Προσθέστε την τιμή 2 στο τέλος των διανυσματικών αριθμών.
  12. Δηλώστε μια ακέραια μεταβλητή n για να αποθηκεύσετε το μέγεθος των διανυσματικών αριθμών.
  13. Εκτυπώστε την τελευταία τιμή του αριθμού διανύσματος μαζί με άλλο κείμενο. Θα πρέπει να επιστρέψει ένα 2.
  14. Αφαιρέστε το τελευταίο στοιχείο από τους αριθμούς του διανύσματος. Τα 2 θα αφαιρεθούν.
  15. Εκτύπωση κειμένου στην κονσόλα. Το \ n μετακινεί το δρομέα στη νέα γραμμή για να εκτυπώσει το κείμενο εκεί.
  16. Χρησιμοποιήστε μια επαναληπτική μεταβλητή α για να επαναλάβετε τα στοιχεία των διανυσματικών αριθμών.
  17. Εκτυπώστε τις τιμές των διανυσματικών αριθμών στην κονσόλα για κάθε επανάληψη.
  18. Εισαγάγετε την τιμή 7 στην αρχή των διανυσματικών αριθμών.
  19. Εκτυπώστε την πρώτη τιμή των διανυσματικών αριθμών μαζί με άλλο κείμενο. Θα πρέπει να επιστρέψει 7.
  20. Διαγράψτε όλα τα στοιχεία από τους αριθμούς του διανύσματος.
  21. Εκτυπώστε το μέγεθος του αριθμού διανύσματος μαζί με άλλο κείμενο μετά την εκκαθάριση όλων των περιεχομένων. Θα πρέπει να επιστρέψει 0.
  22. Τέλος του σώματος της κύριας () συνάρτησης.

Χωρητικότητα

Χρησιμοποιήστε τις ακόλουθες συναρτήσεις για να προσδιορίσετε τη χωρητικότητα ενός διανύσματος:

  • Μέγεθος () - Επιστρέφει τον αριθμό των αντικειμένων σε ένα διάνυσμα.
  • Max_size () - Επιστρέφει τον υψηλότερο αριθμό στοιχείων που μπορεί να αποθηκεύσει ένας φορέας.
  • Χωρητικότητα () - Επιστρέφει το μέγεθος του αποθηκευτικού χώρου που έχει εκχωρηθεί σε έναν φορέα.
  • Αλλαγή μεγέθους () -Αλλάζει το μέγεθος του κοντέινερ για να περιέχει n αντικείμενα. Εάν το τρέχον μέγεθος του διανύσματος είναι μεγαλύτερο από το n, τα πίσω στοιχεία θα αφαιρεθούν από το διάνυσμα. Εάν το τρέχον μέγεθος του διανύσματος είναι μικρότερο από το n, θα προστεθούν επιπλέον στοιχεία στο πίσω μέρος του διανύσματος.
  • Empty () -i t επιστρέφει true εάν ένα διάνυσμα είναι κενό, αλλιώς, επιστρέφει false.

Παράδειγμα 3

#include #include using namespace std;int main() {vector vector1;for (int x = 1; x <= 10; x++)vector1.push_back(x);cout << "Vector size: " << vector1.size()<< endl;cout << "Vector capacity: " << vector1.capacity() << endl;cout << "Maximum size of vector: " << vector1.max_size()<< endl;vector1.resize(5);cout << "Vector size after resizing: " << vector1.size() << endl;if (vector1.empty() == false)cout << "Vector is not empty"<

Παραγωγή:

Ακολουθεί ένα στιγμιότυπο οθόνης του κώδικα:

Επεξήγηση κώδικα:

  1. Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικα μας για να χρησιμοποιήσετε τη λειτουργία του.
  2. Συμπεριλάβετε το διανυσματικό αρχείο κεφαλίδας στον κώδικα μας για να χρησιμοποιήσετε τις λειτουργίες του.
  3. Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να το καλέσετε.
  4. Καλέστε την κύρια λειτουργία (). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της λειτουργίας.
  5. Δημιουργήστε ένα διάνυσμα που ονομάζεται vector1 για να αποθηκεύσετε ακέραιους αριθμούς.
  6. Χρησιμοποιήστε ένα για βρόχο για να δημιουργήσετε μεταβλητή x με τιμές από 1 έως 10.
  7. Σπρώξτε τις τιμές της μεταβλητής x στο διάνυσμα.
  8. Εκτυπώστε το μέγεθος του διανύσματος μαζί με άλλο κείμενο στην κονσόλα.
  9. Εκτυπώστε τη χωρητικότητα του διανύσματος μαζί με άλλο κείμενο στην κονσόλα.
  10. Εκτυπώστε τον μέγιστο αριθμό αντικειμένων που μπορεί να διατηρήσει το διάνυσμα μαζί με άλλο κείμενο στην κονσόλα.
  11. Αλλάξτε το μέγεθος του διανύσματος για να κρατήσετε μόνο 5 στοιχεία.
  12. Εκτυπώστε το νέο μέγεθος του διανύσματος μαζί με άλλο κείμενο.
  13. Ελέγξτε αν το διάνυσμα δεν είναι κενό.
  14. Εκτύπωση κειμένου στην κονσόλα εάν το διάνυσμα δεν είναι κενό.
  15. Χρησιμοποιήστε μια άλλη δήλωση για να δηλώσετε τι πρέπει να κάνετε εάν το διάνυσμα είναι κενό.
  16. Κείμενο για εκτύπωση στην κονσόλα εάν το διάνυσμα είναι κενό.
  17. Το πρόγραμμα πρέπει να επιστρέψει την τιμή μετά την επιτυχή ολοκλήρωση.
  18. Τέλος του κύριου () σώματος λειτουργίας.

Περίληψη:

  • Ένας φορέας C ++ είναι μια δυναμική συστοιχία ικανή να αλλάζει το μέγεθος αυτόματα όταν ένα στοιχείο προστίθεται ή διαγράφεται από αυτό.
  • Ο χώρος αποθήκευσης για έναν φορέα διαχειρίζεται αυτόματα από το δοχείο.
  • Τα στοιχεία ενός διανύσματος αποθηκεύονται σε συνεχόμενη αποθήκευση προκειμένου να είναι προσβάσιμα και στη συνέχεια να διασχίζονται χρησιμοποιώντας επαναληπτικούς.
  • Η εισαγωγή νέων δεδομένων σε ένα φορέα γίνεται στο τέλος του.
  • Η εισαγωγή δεδομένων σε ένα φορέα απαιτεί διαφορετικό χρόνο.
  • Η αφαίρεση ενός στοιχείου από έναν φορέα απαιτεί σταθερό χρόνο.
  • Η εισαγωγή ή διαγραφή ενός στοιχείου στην αρχή απαιτεί γραμμικό χρόνο.
  • Τα διανύσματα πρέπει να χρησιμοποιούνται όταν ασχολούνται με στοιχεία δεδομένων που αλλάζουν με συνέπεια.
  • Επίσης, μπορείτε να χρησιμοποιήσετε διανύσματα εάν το μέγεθος των δεδομένων δεν είναι γνωστό πριν από την έναρξη.