Vector frente a std::array y array de C
Compare los tres contenedores secuenciales y elija uno según el tamaño, la propiedad y el rendimiento.
Vector frente a std::array y array de C es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Tres contenedores secuenciales
C++ ofrece tres formas de almacenar una secuencia contigua:
- std::vector — tamaño dinámico, almacenamiento en el montón
- std::array — tamaño fijo en tiempo de compilación, almacenamiento en la pila
- Array de estilo C — tamaño fijo, bajo nivel
Arrays de estilo C
La forma más antigua. El tamaño forma parte del tipo. Se convierte implícitamente en un puntero al pasarlo a funciones, por lo que se pierde el tamaño.
int a[5] = {1, 2, 3, 4, 5};
std::cout << a[2]; // 3Problemas de los arrays de estilo C
Olvidan su tamaño en la mayoría de los contextos, no comprueban los límites y se pueden utilizar fácilmente de forma incorrecta. En código nuevo, prefiera std::array o std::vector.
std::array (C++11)
Es una envoltura ligera alrededor de un array de tamaño fijo. Ofrece el mismo rendimiento que un array de C, pero con un tipo real y funciones miembro adecuadas.
#include <array>
std::array<int, 5> a = {1, 2, 3, 4, 5};
std::cout << a.size(); // 5
std::cout << a.at(2); // bounds-checkedstd::array permanece en la pila
A diferencia de vector, std::array almacena sus elementos directamente. No hay asignación en el montón. El tamaño es un parámetro de plantilla.
std::vector para tamaños dinámicos
Use std::vector cuando no conozca el tamaño en tiempo de compilación o cuando el tamaño vaya a cambiar durante la ejecución.
Comparación de rendimiento
Para tamaños fijos, los tres ofrecen un rendimiento similar. std::vector añade una pequeña sobrecarga para gestionar el puntero y el tamaño, además de una indirección.
Pasar a funciones
Pase vector o std::array por referencia const para evitar copias. Los arrays de C deben sustituirse por std::span (C++20) cuando se tomen prestados.
void process(const std::vector<int>& v);
void process(const std::array<int, 5>& a);
#include <span>
void process(std::span<const int> data); // accepts bothstd::span (C++20)
Es una vista que no posee una secuencia contigua. Funciona como un par de puntero y longitud. Acepta vectores, std::arrays y arrays de C de manera uniforme.
Cuándo elegir cada opción
Árbol de decisión:
- Se necesita un tamaño dinámico →
std::vector - Tamaño fijo, sin asignación →
std::array - Acceso prestado sin propiedad →
std::span - Interoperabilidad con código C → array de C
Conversión entre ellos
Puede copiar elementos entre tipos mediante rangos o algoritmos.
std::array<int, 3> a = {1, 2, 3};
std::vector<int> v(a.begin(), a.end());
int c[3];
std::copy(a.begin(), a.end(), c);Comprobación rápida
¿Qué contenedor almacena los elementos en la pila y tiene un tamaño conocido en tiempo de compilación?
Resumen
Prefiera std::vector para tamaños dinámicos y std::array para tamaños fijos. Los arrays de estilo C rara vez son la mejor opción en código moderno. Use std::span para tomar prestada una secuencia sin poseerla.
Preguntas frecuentes
¿La lección «Vector frente a std::array y array de C» es gratis?
Sí — el texto completo de «Vector frente a std::array y array de C» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Vector frente a std::array y array de C»?
Compare los tres contenedores secuenciales y elija uno según el tamaño, la propiedad y el rendimiento. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Vector frente a std::array y array de C»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos de std::vector: push_back, size y capacity
- Iteración de vectores: índices, range-for e iteradores
- Modificación de vectores: insert, erase y clear
- Vector frente a std::array y array de C