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 <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 <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 <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 <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 <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ística | std::array | Array de estilo C | std::vector |
|---|---|---|---|
| Tamaño | Fijo en tiempo de compilación | Fijo en tiempo de compilación | Dinámicamente variable |
| Comprobación de límites | at()Proporciona comprobación de límites | Ninguno | at()Proporciona comprobación de límites |
| Gestión de memoria | Asignación en la pila | Asignación en la pila | Asignación en el montón |
| Rendimiento | Eficiente | Eficiente | Menor (asignación dinámica) |
| Interfaz | Admite la interfaz estándar de STL | No admite la interfaz estándar de STL | Admite 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.