Vektorcontainer in C++ STL
-
Verwenden von
std::vector
zum Konstruieren eines dynamischen Arrays in C++ -
Verwendung von
std::vector
zum Speichern vonstruct
-Objekten in C++ -
Verwenden der Funktion
std::vector::swap
zum Vertauschen von Vektorelementen in C++
In diesem Artikel werden verschiedene Methoden zur Verwendung eines Vektor
-Containers in C++ vorgestellt.
Verwenden von std::vector
zum Konstruieren eines dynamischen Arrays in C++
std::vector
ist Teil der Containerbibliothek und implementiert ein dynamisch anpassbares Array, das Elemente in einem zusammenhängenden Speicher speichert. vector
-Elemente werden normalerweise am Ende mit den eingebauten Funktionen push_back
oder emplace_back
hinzugefügt. Der Vektor
-Container kann einfach mit der Initialisierungsliste konstruiert werden, wie im folgenden Beispielcode gezeigt - Objekt arr
. Außerdem kann man statische Initialisierungslistenwerte im Makroausdruck speichern und die Initialisierungsoperation bei Bedarf prägnant ausdrücken.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
#define INIT \
{ "Neque", "porro", "quisquam", "est", "qui", "dolorem", "ipsum", "quia" }
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<string> arr = {"Neque", "porro", "quisquam", "est",
"qui", "dolorem", "ipsum", "quia"};
printVector(arr);
cout << endl;
vector<string> arr2 = INIT;
printVector(arr2);
cout << endl;
return EXIT_SUCCESS;
}
Verwendung von std::vector
zum Speichern von struct
-Objekten in C++
std::vector
kann verwendet werden, um benutzerdefinierte Strukturen zu speichern und sie mit der geschweiften Listennotation zu initialisieren, die dem vorherigen Beispiel ähnelt. Beachten Sie, dass beim Hinzufügen eines neuen struct
-Elements mit der Funktion push_back
der Wert als geschweifte Liste übergeben werden sollte. Wenn sich in einer struct
mehrere verschachtelte Strukturen befinden, sollte die entsprechende Notation verwendet werden.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
struct cpu {
string wine;
string country;
int year;
} typedef cpu;
int main() {
vector<cpu> arr3 = {{"Chardonnay", "France", 2018}, {"Merlot", "USA", 2010}};
for (const auto &item : arr3) {
cout << item.wine << " - " << item.country << " - " << item.year << endl;
}
arr3.push_back({"Cabernet", "France", 2015});
for (const auto &item : arr3) {
cout << item.wine << " - " << item.country << " - " << item.year << endl;
}
return EXIT_SUCCESS;
}
Verwenden der Funktion std::vector::swap
zum Vertauschen von Vektorelementen in C++
std::vector
bietet mehrere integrierte Funktionen, um seine Elemente zu bearbeiten, von denen eine swap
ist. Es kann vom Vektor
-Objekt aufgerufen werden und einen anderen Vektor
als Argument verwenden, um deren Inhalt auszutauschen. Eine weitere nützliche Funktion ist size
, mit der die aktuelle Elementanzahl im angegebenen Vektor
-Objekt abgerufen wird. Beachten Sie jedoch, dass es eine ähnliche Funktion namens capacity
gibt, die die Anzahl der im aktuell zugewiesenen Puffer gespeicherten Elemente zurückgibt. Letzteres wird manchmal größer zugewiesen, um unnötige Aufrufe der Betriebssystemdienste zu vermeiden. Der folgende Beispielcode zeigt das Szenario, in dem die beiden Funktionen unterschiedliche Werte zurückgeben.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<int> arr4 = {1, 12, 45, 134, 424};
vector<int> arr5 = {41, 32, 15, 14, 99};
printVector(arr4);
arr4.swap(arr5);
printVector(arr4);
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
for (int i = 0; i < 10000; ++i) {
arr4.push_back(i * 5);
}
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
arr4.shrink_to_fit();
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
return EXIT_SUCCESS;
}
Ausgabe:
1, 12, 45, 134, 424,
41, 32, 15, 14, 99,
arr4 capacity: 5 size: 5
arr4 capacity: 10240 size: 10005
arr4 capacity: 10005 size: 10005
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook