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

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

Constantes pré-definidas

Ds\Deque::MIN_CAPACITY

Registro de Alterações

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

Table of Contents