Clase de contenedor de C++<array>

El estándar C++11 introdujo el<array>archivo de encabezado, que proporciona un contenedor de array de tamaño fijo. En comparación con los arrays del lenguaje C, tiene mejores características de seguridad de tipos y gestión de memoria.

std::arrayes una clase de plantilla en la biblioteca estándar de C++, definida en<array>el archivo de encabezado.std::arrayLa clase de plantilla proporciona un array de tamaño fijo, cuyo tamaño se determina en tiempo de compilación y no permite cambios dinámicos.

Sintaxis

std::arrayLa sintaxis básica es la siguiente:

#include <array>

std::array<T, N> array_name;
  • Tes el tipo de los elementos del array.
  • Nes el tamaño del array, debe ser un entero no negativo.

Declaración e inicialización

<array>Necesita determinar el tamaño en tiempo de compilación y no puede cambiarse dinámicamente. Ejemplo de uso:

#include <iostream>
#include <array>

int main() {
    std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 声明一个定长为5的int数组
    return 0;
}

Características

  • Seguridad de tipos:std::arrayAplica una comprobación estricta de tipos, evitando los problemas de inseguridad de tipos de los arrays del lenguaje C.
  • Tamaño fijo: el tamaño del array se determina en tiempo de compilación y no puede cambiarse en tiempo de ejecución.
  • Memoria contigua:std::arrayLos elementos se almacenan de forma contigua en memoria, lo que permite acceder a los elementos de manera eficiente.
  • Contenedor estándar:std::arrayproporciona unastd::vectorinterfaz similar, comosize(), at(), front(), back()etc.

Ejemplo

A continuación se muestra un ejemplo simple que utilizastd::array, incluyendo el resultado de salida.

Ejemplo

#include <iostream>
#include <array>

int main() {
    // Crear un std::array que contiene 5 enteros
    std::array<int, 5> myArray = {1, 2, 3, 4, 5};

    // Usar un bucle for de rango para recorrer el array
    for (const auto& value : myArray) {
        std::cout << value << " ";
    }
    std::cout << std::endl;

    // Acceder a los elementos del array mediante índices
    std::cout << "Element at index 2: " << myArray.at(2) << std::endl;

    // Obtener el tamaño del array
    std::cout << "Array size: " << myArray.size() << std::endl;

    // Modificar los elementos del array
    myArray[3] = 10;

    // Recorrer el array de nuevo para mostrar los elementos modificados
    for (const auto& value : myArray) {
        std::cout << value << " ";
    }
    std::cout << std::endl;

    return 0;
}

Salida:

1 2 3 4 5 
Element at index 2: 3
Array size: 5
1 2 3 10 5 

Funciones miembro comunes

Las siguientes son<array>algunas funciones miembro comunes en:

Función Descripción
at(size_t pos) Devuelve el elemento en la posición especificada, con comprobación de límites
operator[] Devuelve el elemento en la posición especificada, sin comprobación de límites
front() Devuelve el primer elemento del array
back() Devuelve el último elemento del array
data() Devuelve un puntero a los datos del array
size() Devuelve el tamaño del array (fijo e inmutable)
fill(const T& value) Establece todos los elementos del array a un valor especificado
swap(array& other) Intercambia el contenido de dos arrays
begin() / end() Devuelve los iteradores de inicio/fin del array

Ejemplo

1. Operaciones básicas

Ejemplo

#include <iostream>
#include <array>

int main() {
    std::array<int, 5> arr = {10, 20, 30, 40, 50};

    std::cout << "Array elements: ";
    for (int i = 0; i < arr.size(); ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    // Obtener el primer y el último elemento
    std::cout << "First element: " << arr.front() << std::endl;
    std::cout << "Last element: " << arr.back() << std::endl;

    return 0;
}

Uso de at y comprobación de límites

Ejemplo

#include <iostream>
#include <array>

int main() {
    std::array<int, 3> arr = {1, 2, 3};

    try {
        std::cout << arr.at(2) << std::endl;  // Salida normal
        std::cout << arr.at(5) << std::endl;  // Fuera de rango, lanza una excepción
    } catch (const std::out_of_range& e) {
        std::cout << "Exception: " << e.what() << std::endl;
    }

    return 0;
}

3. Uso de fill para rellenar elementos

Ejemplo

#include <iostream>
#include <array>

int main() {
    std::array<int, 5> arr;
    arr.fill(100);  // Establecer todos los elementos a 100

    std::cout << "Filled array: ";
    for (const auto& elem : arr) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

4. Intercambio de arrays

Ejemplo

#include <iostream>
#include <array>

int main() {
    std::array<int, 3> arr1 = {1, 2, 3};
    std::array<int, 3> arr2 = {4, 5, 6};

    arr1.swap(arr2);

    std::cout << "Array 1: ";
    for (const auto& elem : arr1) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    std::cout << "Array 2: ";
    for (const auto& elem : arr2) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

Comparación con otros tipos de arrays

Característicastd::arrayArray de estilo Cstd::vector
TamañoFijo en tiempo de compilaciónFijo en tiempo de compilaciónDinámicamente variable
Comprobación de límitesat()Proporciona comprobación de límitesNingunoat()Proporciona comprobación de límites
Gestión de memoriaAsignación en la pilaAsignación en la pilaAsignación en el montón
RendimientoEficienteEficienteMenor (asignación dinámica)
InterfazAdmite la interfaz estándar de STLNo admite la interfaz estándar de STLAdmite la interfaz estándar de STL

std::arrayes un contenedor muy útil en la biblioteca estándar de C++, que proporciona arrays de tamaño fijo y tiene las ventajas de seguridad de tipos y gestión de memoria. A través de los ejemplos anteriores, podemos ver cómo crear, acceder y modificar losstd::arrayelementos de. Para escenarios que requieren arrays de tamaño fijo,std::arrayes una muy buena opción.

Otras extensiones