C++ <array> data-Funktion
dataist eine sehr spezielle Funktion in array, sieGibt einen Zeiger auf das zugrunde liegende Array zurück., sodass Sie array wie ein C-Array verwenden können.
dataIst eine Memberfunktion der Containerklasse, die verwendet wird, umeinen Zeiger auf den internen Datenspeicher des Containers zurückzugeben. Dadurch kann array mit C-Stil-APIs oder anderem Code interoperieren, der Rohzeiger erfordert.
databietet eine Brücke zwischen array und C-Sprachcode und spiegelt die Kompatibilität von array wider.
Wortdefinitionen: databedeutet "data" und gibt an, dass der Zeiger auf die zugrunde liegenden Daten abgerufen wird.
Grundlegende Syntax und Parameter
dataist eine Memberfunktion der Container-Klasse, und ihr Aufruf erfordert keine Parameter.
Syntaxformat
T* data(); const T* data() const;
Parameterbeschreibung
- Parameter: Keine Parameter
dataSie akzeptiert keine Parameter.
Funktionsbeschreibung
- Rückgabewert: Gibt einen Zeiger auf das zugrunde liegende Array zurück.Zeiger. Wenn der Container ein const-Container ist, wird ein const-Zeiger zurückgegeben.
- Wirkung: Der zurückgegebene Zeiger zeigt auf das erste Element des Containers, äquivalent zu
&operator[](0)。 - Hinweis: Das Array hat eine feste Größe und allokiert niemals Speicher neu, daher
data()Der zurückgegebene Zeiger ist immer gültig.
Beispiel
Lassen Sie uns dies anhand einer Reihe von Beispielen gründlich beherrschen.dataVerwendung.
Beispiel 1: Grundlegende Verwendung - Abrufen des Zeigers auf das zugrunde liegende Array
Beispiel
#include <array>
int main() {
// 1. Ein Array erstellen
std::array<int, 5> numbers = {10, 20, 30, 40, 50};
std::cout << "Die Größe des Arrays ist: " << numbers.size() << std::endl;
// 2. data verwenden, um den Zeiger auf das zugrunde liegende Array zu erhalten
int* ptr = numbers.data();
std::cout << "Zugriff über Zeiger: " << std::endl;
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << "ptr[" << i << "] = " << ptr[i] << std::endl;
}
return 0;
}
Erwartete Ausgabe:
array的大小是: 5 通过指针访问: ptr[0] = 10 ptr[1] = 20 ptr[2] = 30 ptr[3] = 40 ptr[4] = 50
Codeanalyse:
numbers.data()Gibt einen Zeiger auf das erste Element zurück.- Über den zurückgegebenen Zeiger kann mithilfe der Array-Index-Syntax auf alle Elemente zugegriffen werden.
Beispiel 2: Ändern von Elementen über einen Zeiger
dataDer zurückgegebene Zeiger kann verwendet werden, um Elemente zu ändern.
Beispiel
#include <array>
int main() {
std::array<int, 3> numbers = {10, 20, 30};
std::cout << "Vor der Änderung: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// Den Zeiger über data() abrufen und Elemente ändern
int* ptr = numbers.data();
ptr[0] = 100;
ptr[1] = 200;
ptr[2] = 300;
std::cout << "Nach der Änderung: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
修改前: 10 20 30 修改后: 100 200 300
Codeanalyse:
- Durch
data()Der zurückgegebene Zeiger kann die internen Daten des Arrays direkt ändern.
Beispiel 3: Interaktion mit C-Stil-APIs
dataEine seiner Hauptverwendungen ist die Interaktion mit C-Funktionen, die Array-Zeiger erfordern.
Beispiel
#include <array>
// Eine hypothetische Funktion im C-Stil, die die Summe eines Arrays berechnet
int sumArray(const int* arr, size_t size) {
int sum = 0;
for(size_t i = 0; i < size; ++i) {
sum += arr[i];
}
return sum;
}
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
// Verwenden Sie data(), um das Array an eine Funktion im C-Stil zu übergeben
int total = sumArray(numbers.data(), numbers.size());
std::cout << "Array-Elemente: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
std::cout << "Summe: " << total << std::endl;
return 0;
}
Erwartete Ausgabe:
数组元素: 1 2 3 4 5 总和: 15
Codeanalyse:
numbers.data()Übergeben Sie den internen Array-Zeiger des Arrays an Funktionen, die ihn akzeptierenconst int*der Funktion.- Dies zeigt die Fähigkeit von array, nahtlos mit C-Code zu interagieren.
Weitere Erweiterungen