Fonction data de <array> en C++

C++ classe conteneur <array>


dataest une fonction très spéciale dans array, elleRenvoie un pointeur vers le tableau sous-jacent., ce qui vous permet d'utiliser array comme un tableau C.

dataEst une fonction membre de la classe conteneur, utilisée pourrenvoyer un pointeur vers le stockage interne des données du conteneur. Cela permet à array d'interopérer avec les API de style C ou tout autre code nécessitant des pointeurs bruts.

datafournit un pont entre array et le code en langage C, reflétant la compatibilité de array.

Définitions de mots: datasignifie "data", indiquant l'obtention du pointeur vers les données sous-jacentes.


Syntaxe de base et paramètres

dataest une fonction membre de la classe conteneur, et son appel ne nécessite aucun paramètre.

Format de syntaxe

T* data();
const T* data() const;

Description des paramètres

  • Paramètre: Aucun paramètre
    • dataIl n'accepte aucun paramètre.

Description de la fonction

  • Valeur de retour: Renvoie un pointeur vers le tableau sous-jacent.Pointeur. Si le conteneur est un conteneur const, un pointeur const est renvoyé.
  • Effet: Le pointeur renvoyé pointe vers le premier élément du conteneur, équivalent à&operator[](0)。
  • Remarque: array a une taille fixe et ne réalloue jamais de mémoire, par conséquentdata()Le pointeur renvoyé est toujours valide.

Exemple

nous allons le maîtriser en profondeur à travers une série d'exemples.dataUtilisation.

Exemple 1 : Utilisation de base - obtention du pointeur vers le tableau sous-jacent

Exemple

#include <iostream>
#include <array>

int main() {
    // 1. Créer un tableau
    std::array<int, 5> numbers = {10, 20, 30, 40, 50};

    std::cout << "La taille du tableau est : " << numbers.size() << std::endl;

    // 2. Utiliser data pour obtenir le pointeur vers le tableau sous-jacent
    int* ptr = numbers.data();

    std::cout << "Accès via le pointeur : " << std::endl;
    for(size_t i = 0; i < numbers.size(); ++i) {
        std::cout << "ptr[" << i << "] = " << ptr[i] << std::endl;
    }

    return 0;
}

Sortie attendue :

array的大小是: 5
通过指针访问:
ptr[0] = 10
ptr[1] = 20
ptr[2] = 30
ptr[3] = 40
ptr[4] = 50

Analyse du code :

  1. numbers.data()Renvoie un pointeur vers le premier élément.
  2. Grâce au pointeur renvoyé, tous les éléments sont accessibles en utilisant la syntaxe d'indice de tableau.

Exemple 2 : Modification d'éléments via un pointeur

dataLe pointeur renvoyé peut être utilisé pour modifier des éléments.

Exemple

#include <iostream>
#include <array>

int main() {
    std::array<int, 3> numbers = {10, 20, 30};

    std::cout << "Avant modification : ";
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    // Obtenir le pointeur via data() et modifier des éléments
    int* ptr = numbers.data();
    ptr[0] = 100;
    ptr[1] = 200;
    ptr[2] = 300;

    std::cout << "Après modification : ";
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    return 0;
}

Sortie attendue :

修改前: 10 20 30
修改后: 100 200 300

Analyse du code :

  • Viadata()Le pointeur renvoyé peut directement modifier les données internes du tableau.

Exemple 3 : Interaction avec des API de style C

datal'une de ses principales utilisations est d'interagir avec des fonctions C qui nécessitent des pointeurs de tableau.

Exemple

#include <iostream>
#include <array>

// Une fonction hypothétique de style C qui calcule la somme d'un tableau
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};

    // Utilisez data() pour passer le tableau à une fonction de style C
    int total = sumArray(numbers.data(), numbers.size());

    std::cout << "Éléments du tableau : ";
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;
    std::cout << "Somme : " << total << std::endl;

    return 0;
}

Sortie attendue :

数组元素: 1 2 3 4 5
总和: 15

Analyse du code :

  • numbers.data()Passez le pointeur de tableau interne du tableau aux fonctions qui acceptentconst int*de la fonction.
  • Cela démontre la capacité du tableau à interagir de manière transparente avec le code C.

C++ classe conteneur <array>

autres extensions