Διάνυσμα σε C++ Τυπική βιβλιοθήκη προτύπων (STL) με Παράδειγμα
Τι είναι ένα C++ Διάνυσμα;
A C++ διάνυσμα είναι ένας δυναμικός πίνακας με δυνατότητα αυτόματης αλλαγής μεγέθους. Η αλλαγή μεγέθους πραγματοποιείται αφού προστεθεί ή διαγραφεί ένα στοιχείο από το διάνυσμα. Η αποθήκευση γίνεται αυτόματα από το δοχείο. Τα στοιχεία ενός διανύσματος αποθηκεύονται σε συνεχόμενη αποθήκευση. Αυτό επιτρέπει C++ προγραμματιστές να έχουν πρόσβαση και να διασχίζουν τα διανυσματικά στοιχεία χρησιμοποιώντας επαναλήπτες.
Η εισαγωγή νέων δεδομένων σε ένα διάνυσμα γίνεται στο τέλος του. Αυτό απαιτεί διαφορικό χρόνο. Η αφαίρεση ενός στοιχείου από ένα διάνυσμα απαιτεί σταθερό χρόνο. Ο λόγος είναι ότι δεν υπάρχει ανάγκη αλλαγής μεγέθους του διανύσματος. Η εισαγωγή ή η διαγραφή ενός στοιχείου στην αρχή του διανύσματος απαιτεί γραμμικό χρόνο.
Πότε να χρησιμοποιήσετε ένα διάνυσμα;
A C++ Το διάνυσμα θα πρέπει να χρησιμοποιείται στις ακόλουθες περιπτώσεις:
- Όταν ασχολούμαστε με στοιχεία δεδομένων που αλλάζουν με συνέπεια.
- Εάν το μέγεθος των δεδομένων δεν είναι γνωστό πριν από την έναρξη, το διάνυσμα δεν θα σας ζητήσει να ορίσετε το μέγιστο μέγεθος του κοντέινερ.
Πώς να αρχικοποιήσετε διανύσματα σε C++
Η σύνταξη των διανυσμάτων σε C++ είναι:
vector <data-type> name (items)
- Όπως φαίνεται παραπάνω, ξεκινάμε με τη λέξη-κλειδί διάνυσμα.
- Ο τύπος δεδομένων είναι ο τύπος δεδομένων των στοιχείων που θα αποθηκευτούν στο διάνυσμα.
- Το όνομα είναι το όνομα του φορέα ή των στοιχείων δεδομένων.
- Τα στοιχεία δηλώνουν τον αριθμό των στοιχείων για τα δεδομένα του διανύσματος. Αυτή η παράμετρος είναι προαιρετική.
Επαναληπτικοί
Ο σκοπός των επαναλήψεων είναι να μας βοηθήσουν να έχουμε πρόσβαση στα στοιχεία που είναι αποθηκευμένα σε ένα διάνυσμα. Είναι ένα αντικείμενο που λειτουργεί σαν δείκτης. Εδώ είναι οι κοινές επαναλήψεις που υποστηρίζονται από C++ φορείς:
- διάνυσμα:: start(): δίνει έναν επαναλήπτη που δείχνει στο πρώτο στοιχείο του διανύσματος.
- διάνυσμα:: τέλος(): δίνει έναν επαναλήπτη που δείχνει το στοιχείο past-the-end του διανύσματος.
- διάνυσμα::cbegin(): είναι το ίδιο με το vector::begin(), αλλά δεν έχει τη δυνατότητα να τροποποιήσει στοιχεία.
- διάνυσμα::cend(): είναι το ίδιο με το vector::end() αλλά δεν μπορεί να τροποποιήσει διανυσματικά στοιχεία.
Τροποποιητές
Οι τροποποιητές χρησιμοποιούνται για την αλλαγή της σημασίας του καθορισμένου τύπου δεδομένων. Εδώ είναι οι συνήθεις τροποποιητές στο C++:
- vector::push_back(): Αυτός ο τροποποιητής σπρώχνει τα στοιχεία από το πίσω μέρος.
- διάνυσμα::insert(): Για την εισαγωγή νέων στοιχείων σε ένα διάνυσμα σε μια καθορισμένη θέση.
- vector::pop_back(): Αυτός ο τροποποιητής αφαιρεί τα διανυσματικά στοιχεία από το πίσω μέρος.
- διάνυσμα::erase(): Χρησιμοποιείται για την αφαίρεση μιας σειράς στοιχείων από την καθορισμένη θέση.
- διάνυσμα::clear(): Αφαιρεί όλα τα διανυσματικά στοιχεία.
Παράδειγμα 1
#include <iostream> #include <vector> using namespace std; int main() { vector<int> 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; }
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας. Θα μας επιτρέψει να διαβάζουμε και να γράφουμε στην κονσόλα.
- Συμπεριλάβετε το διανυσματικό αρχείο κεφαλίδας στον κώδικά μας. Θα μας επιτρέψει να εργαστούμε με διανύσματα in C++.
- Συμπεριλάβετε τον χώρο ονομάτων std για να χρησιμοποιήσετε τις κλάσεις και τις συναρτήσεις του χωρίς να τον καλέσετε.
- Καλέστε τη συνάρτηση main() στην οποία πρέπει να προστεθεί η λογική του προγράμματος.
- Το { σηματοδοτεί την έναρξη του σώματος της συνάρτησης main().
- Δηλώστε ένα διάνυσμα με το όνομα nums για να αποθηκεύσετε ένα σύνολο ακεραίων.
- Δημιουργήστε έναν βρόχο for για να μας βοηθήσετε να επαναλάβουμε το διάνυσμα. Η μεταβλητή θα μας βοηθήσει να επαναλάβουμε τα διανυσματικά στοιχεία, από το 1st να 5th στοιχεία.
- Σπρώξτε στοιχεία στο διάνυσμα num από πίσω. Για κάθε επανάληψη, αυτό θα προσθέσει την τρέχουσα τιμή της μεταβλητής a στο διάνυσμα, η οποία είναι 1 έως 5.
- Εκτυπώστε λίγο κείμενο στην κονσόλα
- Χρησιμοποιήστε μια μεταβλητή επαναλήπτη a για να επαναλάβετε τα στοιχεία των διανυσματικών αριθμών από την αρχή έως το στοιχείο past-the-end. Σημειώστε ότι χρησιμοποιούμε επαναλήπτες vector::begin() και vector::end().
- Εκτυπώστε τις τιμές που επισημαίνονται από τη μεταβλητή επαναλήπτη an στην κονσόλα για κάθε επανάληψη.
- Εκτυπώστε λίγο κείμενο στην κονσόλα. Το \n είναι ένας νέος χαρακτήρας γραμμής, μετακινώντας τον κέρσορα στη νέα γραμμή για να εκτυπώσετε από εκεί.
- Χρησιμοποιήστε μια μεταβλητή επαναλήπτη για να επαναλάβετε τα στοιχεία των διανυσματικών αριθμών από την αρχή έως το στοιχείο παρελθόντος. Σημειώστε ότι χρησιμοποιούμε επαναλήπτες vector::cbegin() και vector::cend().
- Εκτυπώστε τις τιμές που επισημαίνονται από τη μεταβλητή επαναλήπτη α στην κονσόλα για κάθε επανάληψη.
- Η κύρια συνάρτηση θα πρέπει να επιστρέψει μια τιμή εάν το πρόγραμμα εκτελείται με επιτυχία.
- Τέλος του σώματος της συνάρτησης main().
Παράδειγμα 2
#include <iostream> #include <vector> using namespace std; int main() { vector<int> 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(); }
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε το διανυσματικό αρχείο κεφαλίδας στον κώδικά μας για να το χρησιμοποιήσετε λειτουργίες.
- Συμπεριλάβετε τον χώρο ονομάτων std για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Καλέστε τη συνάρτηση main(). Η λογική του προγράμματος πρέπει να προστεθεί μέσα στο σώμα του.
- Η αρχή του σώματος της συνάρτησης main().
- Δηλώστε ένα διάνυσμα με το όνομα nums για να αποθηκεύσετε ορισμένες ακέραιες τιμές.
- Αποθηκεύστε 5 στοιχεία στα διανυσματικά αρ. Καθένα με τιμή 1.
- Εκτυπώστε λίγο κείμενο στην κονσόλα
- Χρησιμοποιήστε μια μεταβλητή επαναλήπτη a για να επαναλάβετε τα στοιχεία των διανυσματικών αριθμών.
- Εκτυπώστε τις τιμές των διανυσματικών αριθμών στην κονσόλα για κάθε επανάληψη.
- Προσθέστε την τιμή 2 στο τέλος των διανυσματικών αριθμών.
- Δηλώστε μια ακέραια μεταβλητή n για να αποθηκεύσετε το μέγεθος των διανυσματικών αριθμών.
- Εκτυπώστε την τελευταία τιμή των διανυσματικών αριθμών μαζί με άλλο κείμενο. Θα πρέπει να επιστρέψει ένα 2.
- Αφαιρέστε το τελευταίο στοιχείο από τα διανυσματικά nums. Το 2 θα αφαιρεθεί.
- Εκτύπωση κειμένου στην κονσόλα. Το \n μετακινεί τον κέρσορα στη νέα γραμμή για να εκτυπώσει το κείμενο εκεί.
- Χρησιμοποιήστε μια μεταβλητή επαναλήπτη a για να επαναλάβετε τα στοιχεία των διανυσματικών αριθμών.
- Εκτυπώστε τις τιμές των διανυσματικών αριθμών στην κονσόλα για κάθε επανάληψη.
- Εισαγάγετε την τιμή 7 στην αρχή των διανυσματικών αριθμών.
- Εκτυπώστε την πρώτη τιμή των διανυσματικών αριθμών μαζί με άλλο κείμενο. Θα πρέπει να επιστρέψει 7.
- Διαγράψτε όλα τα στοιχεία από τα διανυσματικά nums.
- Εκτυπώστε το μέγεθος του διανύσματος num μαζί με άλλο κείμενο αφού διαγράψετε όλα τα περιεχόμενα. Θα πρέπει να επιστρέψει 0.
- Τέλος του σώματος της συνάρτησης main().
Χωρητικότητα
Χρησιμοποιήστε τις ακόλουθες συναρτήσεις για να προσδιορίσετε την χωρητικότητα ενός διανύσματος:
- Μέγεθος() -Επιστρέφει τον αριθμό των στοιχείων σε ένα διάνυσμα.
- Μέγιστο_μέγεθος() -Επιστρέφει τον μεγαλύτερο αριθμό στοιχείων που μπορεί να αποθηκεύσει ένα διάνυσμα.
- Χωρητικότητα () –It επιστρέφει την ποσότητα του αποθηκευτικού χώρου που έχει εκχωρηθεί σε ένα διάνυσμα.
- Αλλαγή μεγέθους () –It αλλάζει το μέγεθος του κοντέινερ ώστε να περιέχει n στοιχεία. Εάν το τρέχον μέγεθος του διανύσματος είναι μεγαλύτερο από n, τα πίσω στοιχεία θα αφαιρεθούν από το διάνυσμα. Εάν το τρέχον μέγεθος του διανύσματος είναι μικρότερο από n, θα προστεθούν επιπλέον στοιχεία στο πίσω μέρος του διανύσματος.
- Άδειο () –iΤο t επιστρέφει true εάν ένα διάνυσμα είναι κενό. Διαφορετικά, επιστρέφει ψευδής.
Παράδειγμα 3
#include <iostream> #include <vector> using namespace std; int main() { vector<int> 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"<<endl; else cout << "Vector is empty"<<endl; return 0; }
Παραγωγή:
Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:
Επεξήγηση κώδικα:
- Συμπεριλάβετε το αρχείο κεφαλίδας iostream στον κώδικά μας για να χρησιμοποιήσετε τη λειτουργία του.
- Συμπεριλάβετε το διανυσματικό αρχείο κεφαλίδας στον κώδικά μας για να χρησιμοποιήσετε τις λειτουργίες του.
- Συμπεριλάβετε τον χώρο ονομάτων std στον κώδικά μας για να χρησιμοποιήσετε τις κλάσεις του χωρίς να τον καλέσετε.
- Καλέστε τη συνάρτηση main(). Η λογική του προγράμματος πρέπει να προστεθεί στο σώμα αυτής της συνάρτησης.
- Δημιουργήστε ένα διάνυσμα με το όνομα vector1 για την αποθήκευση ακεραίων.
- Χρησιμοποιήστε έναν βρόχο for για να δημιουργήσετε τη μεταβλητή x με τιμές από 1 έως 10.
- Σπρώξτε τις τιμές της μεταβλητής x στο διάνυσμα.
- Εκτυπώστε το μέγεθος του διανύσματος μαζί με άλλο κείμενο στην κονσόλα.
- Εκτυπώστε τη χωρητικότητα του διανύσματος μαζί με άλλο κείμενο στην κονσόλα.
- Εκτυπώστε τον μέγιστο αριθμό στοιχείων που μπορεί να χωρέσει το διάνυσμα μαζί με άλλο κείμενο στην κονσόλα.
- Αλλάξτε το μέγεθος του διανύσματος ώστε να περιέχει μόνο 5 στοιχεία.
- Εκτυπώστε το νέο μέγεθος του διανύσματος μαζί με άλλο κείμενο.
- Ελέγξτε αν το διάνυσμα δεν είναι κενό.
- Εκτυπώστε κείμενο στην κονσόλα εάν το διάνυσμα δεν είναι κενό.
- Χρησιμοποιήστε μια δήλωση else για να δηλώσετε τι πρέπει να κάνετε εάν το διάνυσμα είναι κενό.
- Κείμενο προς εκτύπωση στην κονσόλα εάν το διάνυσμα είναι κενό.
- Το πρόγραμμα πρέπει να επιστρέψει τιμή μετά την επιτυχή ολοκλήρωση.
- Τέλος του σώματος της συνάρτησης main().
Σύνοψη
- A C++ Το vector είναι ένας δυναμικός πίνακας με δυνατότητα αυτόματης αλλαγής μεγέθους όταν προστίθεται ή διαγράφεται ένα στοιχείο από αυτόν.
- Η αποθήκευση για ένα διάνυσμα διαχειρίζεται αυτόματα το δοχείο.
- Τα στοιχεία ενός διανύσματος αποθηκεύονται σε συνεχή αποθήκευση προκειμένου να είναι προσβάσιμα και στη συνέχεια να διασχίζονται χρησιμοποιώντας επαναλήπτες.
- Η εισαγωγή νέων δεδομένων σε ένα διάνυσμα γίνεται στο τέλος του.
- Η εισαγωγή δεδομένων σε ένα διάνυσμα απαιτεί διαφορικό χρόνο.
- Η αφαίρεση ενός στοιχείου από ένα διάνυσμα απαιτεί σταθερό χρόνο.
- Η εισαγωγή ή η διαγραφή ενός στοιχείου στην αρχή απαιτεί γραμμικό χρόνο.
- Τα διανύσματα πρέπει να χρησιμοποιούνται όταν αντιμετωπίζουμε στοιχεία δεδομένων που αλλάζουν με συνέπεια.
- Επίσης, μπορείτε να χρησιμοποιήσετε διανύσματα εάν το μέγεθος των δεδομένων δεν είναι γνωστό πριν από την έναρξη.