La clase Deque

(PECL ds >= 1.0.0)

Introducción

Un Deque (pronunciado “deck”) es una secuencia de valores en un búfer contiguo que crece y se contrae automáticamente. El nombre es una abreviación inglesa común de “double-ended queue” (cola de doble final) y es usado internamente por Ds\Queue.

Dos punteros son usados para mantener el seguimiento de una cabecera y una cola. Los punteros pueden “envolver alrededor” el final del búfer, lo cual evita la necesidad de mover otros valores alrededor para hacer un espacio. Esto permite que hacer cambios y deshacer cambios sean muy rápidos —  algo en que Ds\Vector no puede competir.

Accediendo a un valor por el índice requiere una traducción entre el índice y su posición correspondiente en el búfer: ((cabecera + posición) % capacidad).

Fortalezas

  • Soporta la sintaxis array (corchetes).
  • Utiliza menos memoria total que un array para el mismo número de valores.
  • Automáticamente libera la memoria asignada cuando su tamaño cae lo suficientemente bajo.
  • get(), set(), push(), pop(), shift(), y unshift() son todos O(1).

Debilidades

  • La capacidad debe ser una potencia de 2.
  • insert() y remove() son O(n).

Sinopsis de la Clase

classDs\DequeimplementsDs\Sequence, ArrayAccess {
constintMIN_CAPACITY = 8;
publicallocate(int$capacity): void
publicapply(callable$callback): void
publiccapacity(): int
publicclear(): void
publiccontains(mixed...$values): bool
publiccopy(): Ds\Deque
publicfilter(callable$callback = ?): Ds\Deque
publicfind(mixed$value): mixed
publicfirst(): mixed
publicget(int$index): mixed
publicinsert(int$index, mixed...$values): void
publicisEmpty(): bool
publicjoin(string$glue = ?): string
publiclast(): mixed
publicmap(callable$callback): Ds\Deque
publicmerge(mixed$values): Ds\Deque
publicpop(): mixed
publicpush(mixed...$values): void
publicreduce(callable$callback, mixed$initial = ?): mixed
publicremove(int$index): mixed
publicreverse(): void
publicrotate(int$rotations): void
publicset(int$index, mixed$value): void
publicshift(): mixed
publicslice(int$index, int$length = ?): Ds\Deque
publicsort(callable$comparator = ?): void
publicsorted(callable$comparator = ?): Ds\Deque
publicsum(): int|float
publictoArray(): array
publicunshift(mixed$values = ?): void
}

Constantes predefinidas

Ds\Deque::MIN_CAPACITY

Historial de cambios

VersiónDescripción
PECL ds 1.3.0 La clase ahora implementa ArrayAccess.

Tabla de contenidos

To Top