# 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 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`

## Registro de Alterações

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

## Índice

- Ds\Deque::allocate — Alloca memória suficiente para uma capacidade necessária
- Ds\Deque::apply — Atualiza todos os valores aplicando uma função de retorno de chamada a cada valor
- Ds\Deque::capacity — Retorna a capacidade atual
- Ds\Deque::clear — Remove todos os valores do deque
- Ds\Deque::__construct — Cria uma nova instância
- Ds\Deque::contains — Determina se a deque contém os valores fornecidos
- Ds\Deque::copy — Retorna uma cópia rasa da deque
- Ds\Deque::count — Retorna o número de valores na coleção
- Ds\Deque::filter — Cria um novo deque usando um callable para determinar quais valores incluir
- Ds\Deque::find — Tenta encontrar o índice de um valor
- Ds\Deque::first — Retorna o primeiro valor na deque
- Ds\Deque::get — Retorna o valor em um índice específico
- Ds\Deque::insert — Insere valores em um índice específico
- Ds\Deque::isEmpty — Retorna se o deque está vazio
- Ds\Deque::join — Une todos os valores como uma string
- Ds\Deque::jsonSerialize — Retorna uma representação que pode ser convertida para JSON
- Ds\Deque::last — Retorna o último valor
- Ds\Deque::map — Retorna o resultado de aplicar uma função de retorno de chamada a cada valor
- Ds\Deque::merge — Retorna o resultado de adicionar todos os valores dados à deque
- Ds\Deque::pop — Remove e retorna o último valor
- Ds\Deque::push — Adiciona valores ao final do deque
- Ds\Deque::reduce — Reduz o deque a um único valor usando uma função de retorno de chamada
- Ds\Deque::remove — Remove e retorna um valor pelo índice
- Ds\Deque::reverse — Inverte a deque no local
- Ds\Deque::reversed — Retorna uma cópia invertida
- Ds\Deque::rotate — Rotaciona a deque por um número dado de rotações
- Ds\Deque::set — Atualiza um valor em um índice específico
- Ds\Deque::shift — Remove e retorna o primeiro valor
- Ds\Deque::slice — Retorna uma sub-deque de um determinado intervalo
- Ds\Deque::sort — Ordena a deque no local
- Ds\Deque::sorted — Retorna uma cópia ordenada
- Ds\Deque::sum — Retorna a soma de todos os valores na deque
- Ds\Deque::toArray — Converte a deque para um array.
- Ds\Deque::unshift — Adiciona valores no início da deque

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open