¿Cuáles son las diferencias entre una matriz y un vector en C ++? Un ejemplo de las diferencias podría incluir bibliotecas, simbolismo, habilidades, etc.
Formación
Las matrices contienen un número específico de elementos de un tipo particular. Para que el compilador pueda reservar la cantidad de espacio requerida cuando se compila el programa, debe especificar el tipo y número de elementos que contendrá la matriz cuando se defina. El compilador debe poder determinar este valor cuando se compila el programa. Una vez que se ha definido una matriz, usa el identificador de la matriz junto con un índice para acceder a elementos específicos de la matriz. las [...] matrices tienen un índice cero; es decir, el primer elemento está en el índice 0. Este esquema de indexación es indicativo de la estrecha relación en C ++ entre punteros y matrices y las reglas que el lenguaje define para la aritmética de punteros.
- Referencia de bolsillo de C ++
Vector
Un vector es una secuencia de objetos de tamaño dinámico que proporciona
operator[]
acceso aleatorio al estilo de una matriz . La función miembropush_back
copia sus argumentos a través del constructor de copia, agrega esa copia como el último elemento en el vector e incrementa su tamaño en uno.pop_back
hace exactamente lo contrario, eliminando el último elemento. Insertar o eliminar elementos del final de un vector requiere un tiempo constante amortizado, y insertar o eliminar desde cualquier otra ubicación toma un tiempo lineal. Estos son los conceptos básicos de los vectores. Hay mucho más para ellos. En la mayoría de los casos, un vector debería ser su primera opción sobre una matriz de estilo C. En primer lugar, tienen un tamaño dinámico, lo que significa que pueden crecer según sea necesario. No tiene que hacer todo tipo de investigación para averiguar un tamaño estático óptimo, como en el caso de las matrices C; un vector crece según sea necesario y se puede cambiar de tamaño más grande o más pequeño manualmente si es necesario. En segundo lugar, los vectores ofrecen la comprobación de límites con laat
función miembro (pero no conoperator[]
), de modo que pueda hacer algo si hace referencia a un índice inexistente en lugar de simplemente ver cómo se bloquea el programa o, peor aún, continuar la ejecución con datos corruptos.- Libro de cocina C ++
Respuestas:
matrices:
malloc
);sizeof
(de ahí el modismo comúnsizeof(arr)/sizeof(*arr)
, que sin embargo falla silenciosamente cuando se usa inadvertidamente en un puntero);std::vector
:&vec[0]
se garantiza que funcionará como se esperaba);begin()
/end()
, los STL habitualestypedef
, ...)También considere la "alternativa moderna" a las matrices -
std::array
; Ya describí en otra respuesta la diferencia entrestd::vector
ystd::array
, es posible que desee echarle un vistazo.fuente
Agregaré que las matrices son construcciones de muy bajo nivel en C ++ y debe tratar de mantenerse alejado de ellas tanto como sea posible cuando "aprenda las cuerdas", incluso Bjarne Stroustrup recomienda esto (él es el diseñador de C ++).
Los vectores se acercan mucho al mismo rendimiento que los arreglos, pero con muchas comodidades y características de seguridad. Probablemente comenzará a usar matrices cuando interactúe con API que se ocupen de matrices en bruto, o cuando cree sus propias colecciones.
fuente
Esas referencias prácticamente respondieron a tu pregunta. En pocas palabras, las longitudes de los vectores son dinámicas, mientras que las matrices tienen un tamaño fijo. cuando usa una matriz, especifica su tamaño al momento de la declaración:
para los vectores, simplemente declare y agregue elementos
a veces no sabrá la cantidad de elementos necesarios, por lo que un vector sería ideal para tal situación.
fuente