C++ <array> operator[]-Operator
Unter allen Möglichkeiten, auf Array-Elemente zuzugreifen,operator[]ist der gebräuchlichste und direkteste, genau wie der Zugriff auf ein normales Array.
operator[]ist der Indexoperator von Containerklassen, der verwendet wird fürdie Rückgabe des Elements an der angegebenen Position, aber er führt keine Grenzenprüfung durch. Seine Verwendung ist genau die gleiche wie bei einem normalen C-Array.
operator[]bietet einen array-ähnlichen Direktzugriff, mit dem Sie schnell auf Elemente an jeder Position zugreifen können.
Wortdefinitionen: operator[]ist der Indexoperator, und die eckigen Klammern sind das Symbol für den Array-Zugriff.
Grundlegende Syntax und Parameter
operator[]ist eine Memberfunktion der Container-Klasse; verwenden Sie sie einfach wie ein Array.
Syntaxformat
reference operator[](size_type pos); const_reference operator[](size_type pos) const;
Parameterbeschreibung
- Parameter:
pos- Typ:
size_type(ein vorzeichenloser Ganzzahltyp, normalerweisesize_t) - Beschreibung: Die Position (der Index) des Elements, auf das zugegriffen werden soll. Der Index beginnt bei 0, und der maximal gültige Index ist
size() - 1。
- Typ:
Funktionsbeschreibung
- Rückgabewert: gibt dieReferenzauf das Element an der angegebenen Position zurück. Wenn der Container ein const-Container ist, wird eine const-Referenz zurückgegeben.
- Wirkung: gibt das Element an der angegebenen Position zurück. Es wird keine Bereichsprüfung durchgeführt; ein Zugriff außerhalb der Grenzen führt zu undefiniertem Verhalten.
- Unterschied zu at():
operator[]führt keine Bereichsprüfung durch, etwas schneller;at()führt eine Bereichsprüfung durch und löst eine Ausnahme aus, wenn außerhalb der Grenzen zugegriffen wird.
Beispiel
Lass es uns anhand einer Reihe von Beispielen von einfach bis komplex gründlich meistern.operator[]Verwendung.
Beispiel 1: Grundlegende Verwendung – Zugriff auf Elemente
Beispiel
#include <array>
int main() {
// 1. Ein Array erstellen und initialisieren
std::array<int, 5> numbers = {10, 20, 30, 40, 50};
std::cout << "Die Größe des Arrays ist: " << numbers.size() << std::endl;
// 2. Verwenden Sie operator[], um auf Elemente zuzugreifen
std::cout << "Erstes Element [0]: " << numbers[0] << std::endl;
std::cout << "Zweites Element [1]: " << numbers[1] << std::endl;
std::cout << "Drittes Element [2]: " << numbers[2] << std::endl;
std::cout << "Letztes Element [4]: " << numbers[4] << std::endl;
// 3. Verwende eine Schleife, um auf alle Elemente zuzugreifen
std::cout << "Alle Elemente: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
array的大小是: 5 第一个元素 [0]: 10 第二个元素 [1]: 20 第三个元素 [2]: 30 最后一个元素 [4]: 50 所有元素: 10 20 30 40 50
Codeanalyse:
numbers[0]Das erste Element zurückgeben10(Index beginnt bei 0).numbers[4]gibt das letzte Element zurück50(weilsize()ist 5, und die gültigen Indizes sind 0-4).- mit Schleifen und
operator[]kann alle Elemente durchlaufen, und seine Verwendung ist genau die gleiche wie bei einem C-Array.
Beispiel 2: Ändern von Elementwerten
operator[]gibt eine Referenz zurück, sodass es verwendet werden kann, um den Wert des Elements zu ändern.
Beispiel
#include <array>
int main() {
std::array<int, 3> numbers = {10, 20, 30};
std::cout << "Vor der Änderung: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// Verwende operator[], um eine Referenz zu erhalten und Elemente zu ändern
numbers[0] = 100;
numbers[1] = 200;
numbers[2] = 300;
std::cout << "Nach der Änderung: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
修改前: 10 20 30 修改后: 100 200 300
Codeanalyse:
numbers[0] = 100;Der Wert des ersten Elements wurde durch die Referenz geändert.- Dies zeigt
operator[]gibt eine modifizierbare lvalue-Referenz zurück.
Beispiel 3: Bereichsbasierte for-Schleife
Du kannst eine bereichsbasierte for-Schleife verwenden, um über das Array zu iterieren.
Beispiel
#include <array>
#include <string>
int main() {
std::array<std::string, 3> names = {"Alice", "Bob", "Charlie"};
std::cout << "Alle Elemente: ";
for(const auto& name : names) {
std::cout << name << " ";
}
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
所有元素: Alice Bob Charlie
Codeanalyse:
- Die bereichsbasierte for-Schleife ist eine prägnante Möglichkeit, auf Array-Elemente zuzugreifen.
- und
operator[]Im Vergleich zu ... ist der Code prägnanter und lesbarer.
Beispiel 4: Berechnung des Skalarprodukts von Vektoren
Nutzungoperator[]Implementiere Vektoroperationen.
Beispiel
#include <array>
// Berechne das Skalarprodukt zweier Vektoren
int dotProduct(const std::array<int, 3>& v1, const std::array<int, 3>& v2) {
int result = 0;
for(size_t i = 0; i < v1.size(); ++i) {
result += v1[i] * v2[i];
}
return result;
}
int main() {
std::array<int, 3> v1 = {1, 2, 3};
std::array<int, 3> v2 = {4, 5, 6};
int result = dotProduct(v1, v2);
std::cout << "Vektor v1: ";
for(size_t i = 0; i < v1.size(); ++i) {
std::cout << v1[i] << " ";
}
std::cout << std::endl;
std::cout << "Vektor v2: ";
for(size_t i = 0; i < v2.size(); ++i) {
std::cout << v2[i] << " ";
}
std::cout << std::endl;
std::cout << "Skalarprodukt: " << result << std::endl;
// 1*4 + 2*5 + 3*6 = 4 + 10 + 18 = 32
return 0;
}
Erwartete Ausgabe:
向量 v1: 1 2 3 向量 v2: 4 5 6 点积: 32
Codeanalyse:
- Nutzung
operator[]In Algorithmen können Sie schnell auf Array-Elemente zugreifen. - Das Skalarprodukt wird berechnet, indem die entsprechenden Elemente multipliziert und dann addiert werden.
Weitere Erweiterungen