Función `data` de `<array>` en C++

C++ 容器类 <array>Clase contenedora `<array>` de C++


dataEs una función muy especial de `array`, quedevuelve un puntero al arreglo subyacente, permitiéndote usar `array` como si fuera un arreglo de C.

dataEs una función miembro de la clase contenedora, utilizada paradevolver un puntero al almacenamiento interno de datos del contenedor. Esto permite que `array` interactúe con API de estilo C u otro código que requiera punteros crudos.

dataProporciona un puente entre `array` y el código en lenguaje C, lo que refleja la compatibilidad de `array`.

Significado de la palabra: dataSignifica "datos", e indica obtener el puntero a los datos subyacentes.


Sintaxis básica y parámetros

dataEs una función miembro de la clase contenedora; no requiere parámetros para llamarla.

Formato de sintaxis

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

Descripción de parámetros

  • Parámetros: Sin parámetros
    • dataNo acepta ningún parámetro.

Descripción de la función

  • Valor de retorno: Devuelve un puntero al arreglo subyacente. Si el contenedor es constante, devuelve un puntero constante.Efecto
  • : El puntero devuelto apunta al primer elemento del contenedor, equivalente aNota&operator[](0)。
  • : `array` tiene un tamaño fijo y nunca reasigna memoria, por lo queel puntero devuelto siempre es válido.data()Ejemplo

Ejemplo

mediante una serie de ejemplos.dataEjemplo 1: Uso básico: obtener el puntero al arreglo subyacente

Ejemplo 1: Uso básico: obtener el puntero al arreglo subyacente

Ejemplo

#include <iostream>
#include <array>

int main() {
    "El tamaño del array es: "
    std::array<int, 5> numbers = {10, 20, 30, 40, 50};

    std::cout << // 2. Usar data para obtener el puntero al arreglo subyacente << numbers.size() << std::endl;

    "Acceso mediante puntero: "
    int* ptr = numbers.data();

    std::cout << Resultado esperado: << std::endl;
    for(size_t i = 0; i < numbers.size(); ++i) {
        std::cout << "ptr[" << i << "] = " << ptr[i] << std::endl;
    }

    return 0;
}

Análisis del código:

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

Devuelve un puntero al primer elemento.

  1. numbers.data()A través del puntero devuelto, se puede acceder a todos los elementos usando la sintaxis de subíndices de arreglo.
  2. Ejemplo 2: Modificar elementos mediante el puntero

Ejemplo 2: Modificar elementos mediante el puntero

dataEjemplo

Ejemplo

#include <iostream>
#include <array>

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

    std::cout << // Obtener el puntero mediante data() y modificar elementos;
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    "Después de modificar: "
    int* ptr = numbers.data();
    ptr[0] = 100;
    ptr[1] = 200;
    ptr[2] = 300;

    std::cout << Resultado esperado:;
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    return 0;
}

Análisis del código:

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

A través del puntero devuelto por

  • se pueden modificar directamente los datos internos de `array`.data()Ejemplo 3: Interacción con API de estilo C

Ejemplo 3: Interacción con API de estilo C

dataEjemplo

Ejemplo

#include <iostream>
#include <array>

// Usar data() para pasar el array a una función de estilo C
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};

    "Elementos del array: "
    int total = sumArray(numbers.data(), numbers.size());

    std::cout << "Suma: ";
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;
    std::cout << Resultado esperado: << total << std::endl;

    return 0;
}

Análisis del código:

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

Pasa el puntero al arreglo interno de `array` a una función que acepta

  • numbers.data().const int*Esto demuestra la capacidad de `array` para interactuar sin problemas con código C.
  • Clase contenedora `<array>` de C++

C++ 容器类 <array>Otras extensiones

Pensando con IA...