C++ <array> data-Funktion

C++ Container-Klasse <array>


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, daherdata()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 <iostream>
#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:

  1. numbers.data()Gibt einen Zeiger auf das erste Element zurück.
  2. Ü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 <iostream>
#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:

  • Durchdata()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 <iostream>
#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.

C++ Container-Klasse <array>

Weitere Erweiterungen