Puedo entender cuándo usar listas, pero no entiendo cuándo es mejor usar vectores que usar listas en videojuegos: ¿cuándo es mejor tener acceso aleatorio rápido?
(Y entiendo por qué es más rápido insertar / eliminar en listas porque simplemente elimina / agrega punteros, pero aún tiene que encontrar el elemento correspondiente ...)
c++
algorithm
data-structure
jokoon
fuente
fuente
container
?Respuestas:
Mi regla general, y estoy seguro de que habrá un debate sobre esto, es nunca usar listas (a menos que necesite eliminar con mucha frecuencia las cosas del medio de las listas grandes).
La velocidad que obtendrá al tener todos sus elementos en su contenedor en la memoria contigua (y, por lo tanto, más amigable con la memoria caché) vale la compensación de los costos adicionales de agregar / eliminar / cambiar el tamaño del vector.
Editar: solo para aclarar un poco más, por supuesto, debería ser evidente que cualquier tipo de pregunta "que es más rápida" debe probarse en cualquier plataforma con cualquier conjunto de datos pertinente a sus necesidades particulares. Si solo necesito una colección de elementos, simplemente uso vector (o deque, que es casi lo mismo) a menos que haya una buena razón para no hacerlo.
fuente
Use una lista cuando la invalidación del iterador causada por la modificación de la mitad de su estructura de datos va a causar un problema, o necesita mantener sus elementos ordenados para que el truco de intercambio y pop para las eliminaciones rápidas de la colección intermedia no funcione y tenga un gran número de eliminaciones de colección media.
También puede considerar usar un Deque. Tiene características de rendimiento similares a un vector, pero no tiene la necesidad de memoria contigua del vector, y es un poco más flexible.
fuente
Su elección debe reflejar sus necesidades. Todos los elementos de los vectores son continuos en la memoria y las listas tienen punteros a los elementos siguientes / anteriores para que cada uno tenga sus ventajas / desventajas:
Listas:
Vectores:
Por lo tanto, la lista es mejor cuando su programa necesita agregar y eliminar elementos con frecuencia, pero nunca acceda (o raramente acceda) a un elemento en particular sin la necesidad de los otros antes. El vector debe usarse para un mejor tiempo de acceso, pero carece de eficacia cuando necesita eliminar o agregar elementos.
Consulte esta publicación en stackoverflow, presenta un gráfico realmente agradable con preguntas básicas sobre sus necesidades que lo lleva a un contenedor específico según sus respuestas:
/programming/366432/extending-stdlist
fuente
Por lo general, las listas se usan para estructuras como colas donde hay muchas operaciones de agregar y quitar. Ejemplo: una lista siempre cambiante de entidades que deberían actualizarse. La lista en sí solo contiene entidades en la pantalla y, por lo tanto, cambia con frecuencia.
Los vectores (o matrices) son más adecuados para una colección que no cambia tanto y donde necesita acceso rápido a elementos individuales dentro de la colección. Ejemplo: un mapa de mosaicos donde debe buscar mosaicos en un índice dado.
La opinión de Tetrads puede ser cierta, pero depende del lenguaje de programación que se use. Veo que etiquetaste tu pregunta
c++
, pero intenté darte una respuesta que no sea específica del idioma.fuente
En los juegos de consola nunca, nunca usamos std :: list porque:
Incluso std :: vector está perdiendo favor en las consolas porque:
fuente
struct point{float x, y, z, w}; std::vector<point> positions;
point
es un objeto C ++ (como esstd::vector
, como es algo tan simple comofloat
). Sé la distinción que estás tratando de trazar, pero estás haciendo un mal trabajo al explicarla.