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

class Ds\Deque implements Ds\Sequence, ArrayAccess {
/* Constantes */
const int MIN_CAPACITY = 8;
/* Métodos */
public function allocate(int $capacity): void
public function apply(callable $callback): void
public function capacity(): int
public function clear(): void
public function contains(mixed ...$values): bool
public function copy(): Ds\Deque
public function filter(callable $callback = ?): Ds\Deque
public function find(mixed $value): mixed
public function first(): mixed
public function get(int $index): mixed
public function insert(int $index, mixed ...$values): void
public function isEmpty(): bool
public function join(string $glue = ?): string
public function last(): mixed
public function map(callable $callback): Ds\Deque
public function merge(mixed $values): Ds\Deque
public function pop(): mixed
public function push(mixed ...$values): void
public function reduce(callable $callback, mixed $initial = ?): mixed
public function remove(int $index): mixed
public function reverse(): void
public function reversed(): Ds\Deque
public function rotate(int $rotations): void
public function set(int $index, mixed $value): void
public function shift(): mixed
public function slice(int $index, int $length = ?): Ds\Deque
public function sort(callable $comparator = ?): void
public function sorted(callable $comparator = ?): Ds\Deque
public function sum(): int|float
public function toArray(): array
public function unshift(mixed $values = ?): void
}

Constantes predefinidas

Ds\Deque::MIN_CAPACITY

Historial de cambios

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

Tabla de contenidos

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top