C++ <vector> push_back-Funktion
Unter den vielen Containern,vector(vector) ist der am häufigsten verwendete und derjenige, der einem automatisch erweiterbaren Array am ähnlichsten ist, währendpush_backist die Schlüsselfunktion, die dieses Array erweiterbar macht.
push_backist eine Member-Funktion, die verwendet wird, umdynamische Arrays (vector)oderAndere Sequenzcontainer (wie zum Beispiellist, deque)vonEndeein neues Element hinzufügen.
push_backimplementieren dasdynamische Wachstumdes Containers, Sie müssen die endgültige Größe des Containers nicht im Voraus festlegen; Sie können während der Programmausführung jederzeit nach Bedarf Elemente hinzufügen.
Wortdefinitionen: pushbedeutet Schieben,backist "back/push", zusammen bedeutet es also "nach hinten anfügen" — sehr intuitiv.
grundlegende Syntax und Parameter
push_backist eine Member-Funktion von Container-Klassen, daher müssen Sie zuerst ein Container-Objekt haben und dann den Punktoperator verwenden., um sie aufzurufen.
Syntaxformat
void push_back(const T& value); void push_back(T&& value); // C++11 之后(支持右值)
Parameterbeschreibung
- Parameter:
value- Typ: derselbe wie der Elementtyp, der beim Definieren des Containers angegeben wurde, oder ein Wert, der in diesen Typ konvertiert werden kann.
- Beschreibung: der Wert, den Sie am Ende des Containers hinzufügen möchten. Er kann eine Variable, ein Literal (wie z. B.
10,"hello"), oder das Ergebnis eines Ausdrucks.
Funktionsbeschreibung
- Rückgabewert:
void(kein Rückgabewert). Ihr Zweck ist ausschließlich das "Hinzufügen eines Elements"; sobald das Hinzufügen abgeschlossen ist, endet die Funktion. - Auswirkung: des Containers
size()(aktuelle Elementanzahl) erhöht sich um 1. Das neue Element wird das letzte Element des Containers.
Beispiel
Lass uns das gründlich anhand einer Reihe von Beispielen von einfach bis komplex meistern.push_backVerwendung.
Beispiel 1: Grundlegende Verwendung — Verwaltung von Ganzzahlen
Beispiel
#include <vector> // 1. Muss die Header-Datei vector einbinden
int main() {
// 2. Erstelle einen leeren Vektor zum Speichern von Ganzzahlen
std::vector<int> numbers;
std::cout << "Anfangs ist die Größe des Vektors: " << numbers.size() << std::endl;
// 3. push_back verwenden, um Elemente hinzuzufügen
numbers.push_back(10); // Ganzzahl 10 am Ende hinzufügen
numbers.push_back(20); // Füge 20 nach 10 hinzu
numbers.push_back(30); // Füge 30 nach 20 hinzu
std::cout << "Nach dem Hinzufügen beträgt die Größe des Vektors: " << numbers.size() << std::endl;
// 4. Durchlaufe alle Elemente und gib sie aus, um die Reihenfolge des Hinzufügens zu überprüfen
std::cout << "Die Elemente im Vektor sind: ";
for(int i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " "; // Zugriff per Index wie bei einem Array
}
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
初始时,vector的大小是: 0 添加后,vector的大小是: 3 vector中的元素是: 10 20 30
Codeanalyse:
#include <vector>ist zu verwendenvectordie Voraussetzung des Containers.std::vector<int> numbers;erstellte einen namensnumbersder leerenvector, der in Zukunft speichern wirdintGanzzahlen vom Typ.- dreimal
push_backaufrufen, sequenziell10,20,30hinzufügen zunumbersam Ende. Die Reihenfolge des Hinzufügens ist die Reihenfolge, in der Elementevectorin der endgültigen Reihenfolge landen. numbers.size()gibt die aktuelle Anzahl der Elemente zurück.numbers[i]Verwenden Sie Indizes, um auf Elemente zuzugreifen, genau wie bei der Array-Verwendung.
Beispiel 2: Strings verwalten
vectorEs kann nicht nur Zahlen, sondern auch Strings, benutzerdefinierte Typen und jeden anderen Datentyp speichern.
Beispiel
#include <vector>
#include <string> // Sie müssen außerdem die Header-Datei einbinden, um string zu verwenden
int main() {
// Erstellen Sie einen Vektor, der std::string speichert
std::vector<std::string> tasks;
// Verwende push_back, um To-do-Einträge hinzuzufügen
tasks.push_back("Learn C++ push_back");
tasks.push_back("Hausaufgaben machen");
tasks.push_back("Technische Dokumentation lesen");
std::cout << "Heutige To-do-Einträge (" << tasks.size() << " item):\n";
// Verwenden Sie eine bereichsbasierte for-Schleife (C++11) zum Durchlaufen, was prägnanter ist
for(const auto& task : tasks) {
std::cout << "- " << task << std::endl;
}
return 0;
}
Erwartete Ausgabe:
今日待办事项 (3 项): - 学习 C++ push_back - 写作业 - 阅读技术文档
Codeanalyse:
std::vector<std::string>deklariert den Elementtyp alsstd::stringcontainer.push_backDer Parameter ist jetzt ein String-Literal (das automatisch umgewandelt wird zustd::string)。for(const auto& task : tasks)ist die in C++11 eingeführte "bereichsbasierte for-Schleife"; sie iteriert automatisch übertasksjedes Element darin, was sehr praktisch ist.autoden Compiler automatisch ableiten lassentaskTyp.
Beispiel 3: Container-Inhalte dynamisch aufbauen
Dies istpush_backDer mächtigste Aspekt: Container auf Basis von Laufzeitdaten aufbauen (wie Benutzereingaben, Dateilesevorgänge).
Beispiel
#include <vector>
int main() {
std::vector<int> scores;
int inputScore;
char continueFlag = 'y';
std::cout << "Bitte geben Sie die Punktzahlen der Schüler ein (geben Sie eine Nicht-Ziffer ein, um zu beenden):\n";
// Methode 1: Die Schleife anhand der Benutzereingabe bestimmen
while(std::cin >> inputScore) {
scores.push_back(inputScore);
}
// Den Fehlerzustand von cin zurücksetzen, um mögliche weitere Eingaben zu ermöglichen
std::cin.clear();
std::cin.ignore(10000, '\n');
// Methode 2: Abfragen, ob fortgesetzt werden soll
/*
while(continueFlag == 'y' || continueFlag == 'Y') {
std::cout << "Bitte geben Sie eine Punktzahl ein: ";
std::cin >> inputScore;
scores.push_back(inputScore);
std::cout << "Eingabe fortsetzen? (y/n): ";
std::cin >> continueFlag;
}
*/
std::cout << "\nInsgesamt " << scores.size() << " Punktzahlen.\n";
if(!scores.empty()) { // Prüfen, ob der Container leer ist
int sum = 0;
for(int score : scores) {
sum += score;
}
std::cout << "Average score: " << static_cast<double>(sum) / scores.size() << std::endl;
}
return 0;
}
Dieses Beispiel zeigt, wie manpush_backeinen Container in einer Schleife dynamisch füllen und schließlich den Durchschnitt berechnen. Sie können versuchen, es auszuführen, und eingeben100 90 85 a(geben Sie zum Schluss einen Buchstaben einaum die Zahleneingabeschleife zu beenden).
Weitere Erweiterungen