2011-11-29 16 views
5

¿Hay un contenedor estándar en C++ que actúe como un híbrido entre un vector y una lista vinculada? Lo que quiero decir es una estructura de datos que supera la sobrecarga de reasignación frecuente de std :: vector y la posible asignación de exceso de memoria; en cambio, cuando la estructura se queda sin espacio, agrega un puntero al siguiente fragmento asignado y solo cuando llega el número de fragmentos un cierto valor, la estructura completa se des-fragmenta en un trozo nuevo continuo y el número de fragmentos se establece en 0.C++ vector/linked list hybrid

+0

¿Has echado un vistazo a 'std :: deque'? ¿Se ajusta a tus necesidades? – Asha

+0

Creo que 'std :: deque' funciona de esa manera, pero no estoy seguro. – Constantinius

+0

@Constantinius Siempre pensé que 'std :: deque' era solo una especie de ringbuffer y por lo tanto similar a un' std :: vector' en su comportamiento de asignación de memoria. –

Respuesta

3

std::deque es el contenedor estándar más cercano a lo que usted describe. No es exactamente de esta manera, sin embargo (por ejemplo, tiene que ser una matriz de matrices en lugar de una lista de matrices, ya que este último no permitiría el acceso a elementos a tiempo constante).

Dependiendo de sus requisitos prácticos, podría ser lo suficientemente cerca.

+0

Así que básicamente puedo usar un deque y simplemente agregar las pocas líneas de código que necesito para desfragmentarlo una vez que se alcanza un cierto nivel de fragmentos. La idea es, naturalmente, eliminar saltos de memoria y errores de caché ... – dtech