09/02/2015, 08:42
|
| | Fecha de Ingreso: octubre-2014 Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses Puntos: 204 | |
Respuesta: [Consulta]Tile Map.¿Mejor std::vector o array? Los contenedores de la STL son una buena idea cuando no se sabe a ciencia cierta la cantidad de elementos que vamos a utilizar. El contendor entonces se encarga de la gestión de la colección por nosotros, lo cual es de agradecer porque te permite eliminar mucho código y centrarte en otros aspectos más importantes de tu código.
Sin embargo, ceder esa gestión tiene un precio, y es que tenemos que ceder en la gestión de la memoria. Si es necesario, el contendor redimensionará el arreglo interno sin preguntarnos, lo cual consume tiempo de ejecución y es algo que hace sin avisarnos.
Si se sabe que el contenedor va a necesitar almacenar X elementos, se puede llamar a "vector.reserve( X )", de tal forma que el contenedor se asegurará que su arreglo interno disponga de al menos esa capacidad para evitar reallocs innecesarios.
Si el tamaño es fijo también puedes optar por usar "std::Array", que es un contenedor especializado para un tamaño fijo.
Yo, personalmente, prefiero usar los contenedores, ya que se usan exactamente igual que los arreglos con la ventaja de que te puedes despreocupar de la gestión interna de esos datos. Además, la implementación de los contenedores suele estar bastante optimizada, luego es complicado que un código propio pueda competir en términos de rendimiento. Sobre este último párrafo una aclaración: la STL tiene varios tipos de contenedores. Si se necesita un rendimiento óptimo hay que saber elegir el contenedor adecuado, ya que cada uno está pensado para un uso determinado y eso hace que todos tengan unas ventajas y unos inconvenientes que hay que tener en cuenta.
Yo es que soy partidario de no reinventar demasiadas veces la rueda... si algo ya existe no necesito volver a crearlo. Prefiero invertir mis esfuerzos en hacer la parte de la aplicación que no está hecha y que nadie me va a ayudar a hacer. |