A classe Deque

(PECL ds >= 1.0.0)

Introdução

Um Deque (pronunciado "deck") é uma sequência de valores em um buffer contíguo que cresce e diminui automaticamente. O nome é uma abreviação comum de "double-ended queue" e é usado internamente por Ds\Queue.

Dois ponteiros são usados para acompanhar um head e um tail. Os ponteiros podem "envolver" a extremidade do buffer, o que evita a necessidade de mover outros valores para criar espaço. Isso torna shift e unshift muito rápidos —  algo que um Ds\Vector não pode competir.

Acesso a um valor pelo índice requer uma tradução entre o índice e sua posição correspondente no buffer: ((head + position) % capacity).

Pontos Fortes

  • Suporta a sintaxe de array (colchetes).
  • Utiliza menos memória geral do que um array para o mesmo número de valores.
  • Libera automaticamente a memória alocada quando seu tamanho diminui o suficiente.
  • get(), set(), push(), pop(), shift() e unshift() são todos O(1).

Pontos Fracos

  • A capacidade deve ser uma potência de 2.
  • insert() e remove() são O(n).

Resumo da classe

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 pré-definidas

Ds\Deque::MIN_CAPACITY

Registro de Alterações

VersãoDescrição
PECL ds 1.3.0 A classe agora implementa ArrayAccess.

Índice

To Top