Namespaces
Variants

std:: array

From cppreference.net
Definido en el encabezado <array>
template <

class T,
std:: size_t N

> struct array ;
(desde C++11)

std::array es un contenedor que encapsula arreglos de tamaño fijo.

Este contenedor es un tipo agregado con la misma semántica que una estructura que contiene un array estilo C T [ N ] como su único miembro de datos no estático. A diferencia de un array estilo C, no se degrada a T * automáticamente. Como tipo agregado, puede inicializarse con inicialización de agregado usando como máximo N inicializadores convertibles a T : std :: array < int , 3 > a = { 1 , 2 , 3 } ; .

La estructura combina el rendimiento y accesibilidad de un array estilo C con las ventajas de un contenedor estándar, como conocer su propio tamaño, soportar asignación, iteradores de acceso aleatorio, etc.

std::array satisface los requisitos de Container y ReversibleContainer excepto que un array construido por defecto no está vacío y que la complejidad del intercambio es lineal, satisface los requisitos de ContiguousContainer , (desde C++17) y satisface parcialmente los requisitos de SequenceContainer .

Existe un caso especial para un array de longitud cero ( N == 0 ). En ese caso, array. begin ( ) == array. end ( ) , que es algún valor único. El efecto de llamar front ( ) o back ( ) en un array de tamaño cero es indefinido.

Un array también puede ser utilizado como una tupla de N elementos del mismo tipo.

Contenidos

Invalidación de iteradores

Como regla general, los iteradores de un array nunca se invalidan durante la vida útil del array. Sin embargo, debe tenerse en cuenta que durante swap , el iterador continuará apuntando al mismo elemento del array, y por lo tanto cambiará su valor.

Parámetros de plantilla

T - tipo de elemento Debe ser MoveConstructible y MoveAssignable .
N - el número de elementos en el array o 0 .

Tipos de miembros

Tipo de miembro Definición
value_type T
size_type std::size_t
difference_type std::ptrdiff_t
reference value_type &
const_reference const value_type &
pointer value_type *
const_pointer const value_type *
iterator

LegacyRandomAccessIterator y LegacyContiguousIterator a value_type

(hasta C++17)

LegacyRandomAccessIterator y LegacyContiguousIterator que es un LiteralType a value_type

(desde C++17)
(hasta C++20)

LegacyRandomAccessIterator , contiguous_iterator , y ConstexprIterator a value_type

(desde C++20)
const_iterator

LegacyRandomAccessIterator y LegacyContiguousIterator a const value_type

(hasta C++17)

LegacyRandomAccessIterator y LegacyContiguousIterator que es un LiteralType a const value_type

(desde C++17)
(hasta C++20)

LegacyRandomAccessIterator , contiguous_iterator , y ConstexprIterator a const value_type

(desde C++20)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

Funciones miembro

Funciones miembro definidas implícitamente
(constructor)
(implicitly declared)
inicializa el array siguiendo las reglas de inicialización de agregado (nótese que la inicialización por defecto puede resultar en valores indeterminados para tipos no-clase T )
(función miembro pública)
(destructor)
(implicitly declared)
destruye cada elemento del array
(función miembro pública)
operator=
(implicitly declared)
sobrescribe cada elemento del array con el elemento correspondiente de otro array
(función miembro pública)
Acceso a elementos
accede al elemento especificado con verificación de límites
(función miembro pública)
accede al elemento especificado
(función miembro pública)
accede al primer elemento
(función miembro pública)
accede al último elemento
(función miembro pública)
acceso directo al almacenamiento contiguo subyacente
(función miembro pública)
Iteradores
devuelve un iterador al inicio
(función miembro pública)
devuelve un iterador al final
(función miembro pública)
devuelve un iterador inverso al inicio
(función miembro pública)
devuelve un iterador inverso al final
(función miembro pública)
Capacidad
comprueba si el contenedor está vacío
(función miembro pública)
devuelve el número de elementos
(función miembro pública)
devuelve el número máximo posible de elementos
(función miembro pública)
Operaciones
llena el contenedor con el valor especificado
(función miembro pública)
intercambia los contenidos
(función miembro pública)

Funciones no miembro

(C++11) (C++11) (eliminado en C++20) (C++11) (eliminado en C++20) (C++11) (eliminado en C++20) (C++11) (eliminado en C++20) (C++11) (eliminado en C++20) (C++20)
compara lexicográficamente los valores de dos array s
(plantilla de función)
accede a un elemento de un array
(plantilla de función)
especializa el algoritmo std::swap
(plantilla de función)
(C++20)
crea un objeto std::array a partir de un array incorporado
(plantilla de función)

Clases auxiliares

obtiene el tamaño de un array
(especialización de plantilla de clase)
obtiene el tipo de los elementos de array
(especialización de plantilla de clase)

Guías de deducción

(desde C++17)

Ejemplo

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    // La construcción utiliza inicialización por agregado
    std::array<int, 3> a1{{1, 2, 3}}; // Se requieren llaves dobles en C++11 antes de
                                      // la revisión CWG 1270 (no se necesitan en C++11
                                      // después de la revisión y en C++14 y posteriores)
    std::array<int, 3> a2 = {1, 2, 3}; // Las llaves dobles nunca se requieren después de =
    // Se admiten operaciones de contenedor
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    // Se admite el bucle for por rangos
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
    // Guía de deducción para creación de array (desde C++17)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
    // El comportamiento de elementos no especificados es el mismo que con arrays integrados
    [[maybe_unused]] std::array<int, 2> a5; // Sin inicialización por lista, a5[0] y a5[1]
                                            // se inicializan por defecto
    [[maybe_unused]] std::array<int, 2> a6{}; // Inicialización por lista, ambos elementos se
                                              // inicializan por valor, a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // Inicialización por lista, el elemento no especificado se
                                               // inicializa por valor, a7[0] = 1, a7[1] = 0
}

Salida:

3 2 1
E Ǝ

Véase también

array contiguo in situ de capacidad fija y redimensionable
(plantilla de clase)
array contiguo redimensionable
(plantilla de clase)
cola de doble extremo
(plantilla de clase)
(library fundamentals TS v2)
crea un objeto std::array cuyo tamaño y opcionalmente el tipo de elemento se deducen de los argumentos
(plantilla de función)