Auf Elemente zugreifen
Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 12 von 56.
Nachdem Sie nun Vektoren erstellen und Elemente hinzufügen können, müssen Sie wissen, wie Sie auf bestimmte Elemente aus Ihrem Vektor zugreifen. C++ bietet zwei Hauptmöglichkeiten für den Zugriff auf einzelne Elemente: den eckigen Klammeroperator und die .at()-Methode.
Der eckige Klammer-Operator [] funktioniert genau wie bei regulären Arrays. Sie geben den Index des Elements an, auf das Sie zugreifen möchten:
std::vector<int> numbers = {10, 20, 30, 40};
int first = numbers[0]; // Erhält 10
int third = numbers[2]; // Erhält 30Die Methode .at() bietet eine alternative Möglichkeit, auf Elemente zuzugreifen, mit einem wichtigen Unterschied – sie beinhaltet eine Bereichsprüfung (Bounds-Checking):
int first = numbers.at(0); // Liefert 10
int third = numbers.at(2); // Liefert 30Der entscheidende Unterschied ist die Sicherheit: Wenn Sie versuchen, auf einen Index zuzugreifen, der nicht existiert, kann [] unvorhersehbares Verhalten verursachen, während .at() eine Exception auslöst, um Sie auf den Fehler hinzuweisen. Für Lernzwecke funktionieren beide Methoden gut, aber .at() bietet zusätzlichen Schutz gegen den Zugriff auf ungültige Positionen in Ihrem Vector.
Aufgabe
EinfachErstellen Sie ein Programm, das den Zugriff auf Vektorelemente demonstriert, indem es bestimmte Elemente aus einem Vektor sowohl mit dem eckigen Klammeroperator als auch mit der Methode .at() abruft.
Die folgenden Eingaben werden bereitgestellt:
- Ein Ganzzahlwert
n, der die Anzahl der Elemente im Vektor darstellt - Anschließend
nGanzzahlen, um den Vektor zu füllen - Ein Ganzzahlwert
index1, der den ersten zuzugreifenden Index darstellt - Ein Ganzzahlwert
index2, der den zweiten zuzugreifenden Index darstellt
Ihr Programm sollte:
- Einen
std::vector<int>namensdataerstellen push_back()verwenden, um jede derneingegebenen Zahlen zum Vektor hinzuzufügen- Auf das Element bei
index1mit dem eckigen Klammeroperator[]zugreifen und es in einer Variable namensvalue1speichern - Auf das Element bei
index2mit der Methode.at()zugreifen und es in einer Variable namensvalue2speichern - Die abgerufenen Werte und ihre entsprechenden Indizes ausgeben
- Das erste und das letzte Element des Vektors mittels indexbasiertem Zugriff ausgeben
Verwenden Sie das folgende genaue Ausgabeformat:
Element at index [index1]: [value1]
Element at index [index2]: [value2]
First element: [first value]
Last element: [last value]Verwenden Sie für den Zugriff auf das letzte Element data.size() - 1 als Index mit dem eckigen Klammeroperator.
Spickzettel
C++-Vektoren bieten zwei Hauptmöglichkeiten für den Zugriff auf einzelne Elemente:
Eckige-Klammern-Operator []:
std::vector<int> numbers = {10, 20, 30, 40};
int first = numbers[0]; // Liefert 10
int third = numbers[2]; // Liefert 30Die .at()-Methode:
int first = numbers.at(0); // Liefert 10
int third = numbers.at(2); // Liefert 30Der Hauptunterschied ist die Sicherheit: [] kann unvorhersehbares Verhalten verursachen, wenn auf ungültige Indizes zugegriffen wird, während .at() eine Exception für den Schutz durch Bereichsprüfung (Bounds-Checking) auslöst.
Um auf das letzte Element zuzugreifen, verwenden Sie data.size() - 1 als Index.
Probier es selbst
#include <iostream>
#include <vector>
using namespace std;
int main() {
// Eingabe lesen
int n;
cin >> n;
vector<int> data;
// Lese n Ganzzahlen und füge sie dem Vektor hinzu
for (int i = 0; i < n; i++) {
int num;
cin >> num;
data.push_back(num);
}
int index1, index2;
cin >> index1;
cin >> index2;
// TODO: Schreibe deinen Code unten
// Greife auf Elemente mit dem []-Operator und der .at()-Methode zu
// Speichere die abgerufenen Werte in value1 und value2
// Ergebnisse ausgeben
cout << "Element at index " << index1 << ": " << value1 << endl;
cout << "Element at index " << index2 << ": " << value2 << endl;
cout << "First element: " << /* auf das erste Element zugreifen */ << endl;
cout << "Last element: " << /* auf das letzte Element mit data.size() - 1 zugreifen */ << endl;
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Pointer und Speicher
Was ist ein Pointer?AdressoperatorDereferenzierungsoperatorNull-PointerPointer und ArraysDynamischer Speicher mit 'new'Speicher freigeben mit 'delete'Zusammenfassung – Pointer-Übung2Vektoren (Dynamische Arrays)
Einführung in std::vectorEinen Vector erstellenElemente hinzufügenAuf Elemente zugreifenVector-GrößeIterieren mit einer For-SchleifeRange-based For-SchleifeElemente entfernenZusammenfassung – Vector-Operationen3Projekt: Aufgabenlisten-Tool
ProjektübersichtEine Aufgabe hinzufügen