# Класс Deque

(PECL ds >= 1.0.0)

## Введение

Двухсторонняя очередь — последовательность значений в непрерывном буфере, который растёт и уменьшаются автоматически. Deque (произносится как «deck») — аббревиатура от «double-ended queue» и используется внутри структуры Ds\Queue.

Для отслеживания начала и конца используются два указателя. Указатели могут «обтекать» конец буфера, что помогает избежать перемещения значений для освобождения места. Это делает операции shift и unshift такими быстрыми, что структура Ds\Vector не может с этим соперничать.

Доступ к элементу по индексу требует пересчёта в зависимости от его индекса в буфере: `((head + position) % capacity)`.

## Сильные стороны

- Поддерживает синтаксис массива (квадратные скобки).
- Требует меньше памяти, чем массив (array) с тем же количеством значений.
- Автоматически освобождает память, когда количество элементов уменьшается.
- get(), set(), push(), pop(), shift() и unshift() имеют сложность O(1).

## Слабые стороны

- Вместимость ограничена степенями двойки.
- insert() и remove() имеют сложность O(n).

## Обзор класса

class Ds\Deque implements Ds\Sequence, ArrayAccess {
/* Константы */
const int MIN_CAPACITY = 8;
/* Методы */
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
}

## Предопределённые константы

`Ds\Deque::MIN_CAPACITY`

## Список изменений

Версия | Описание
--- | ---
PECL ds 1.3.0 | Теперь класс реализует интерфейс ArrayAccess.

## Содержание

- Ds\Deque::allocate — Выделяет память под указанную вместимость
- Ds\Deque::apply — Обновляет все значения, применяя callback-функцию к каждому значению
- Ds\Deque::capacity — Возвращает текущую вместимость
- Ds\Deque::clear — Удаляет все значения из двухсторонней очереди
- Ds\Deque::__construct — Создаёт новый экземпляр
- Ds\Deque::contains — Проверяет, содержится ли в двухсторонней очереди заданные значения
- Ds\Deque::copy — Возвращает поверхностную копию коллекции
- Ds\Deque::count — Возвращает количество элементов двухсторонней очереди
- Ds\Deque::filter — Создаёт новую двухстороннюю очередь из элементов, выбранных с помощью заданной callback-функции
- Ds\Deque::find — Поиск индекса по значению
- Ds\Deque::first — Возвращает первый элемент двухсторонней очереди
- Ds\Deque::get — Возвращает значение по индексу
- Ds\Deque::insert — Вставляет значения по указанному индексу
- Ds\Deque::isEmpty — Проверяет, пуста ли двухсторонняя очередь
- Ds\Deque::join — Склеивает все значения в строку
- Ds\Deque::jsonSerialize — Возвращает коллекцию в JSON-представлении
- Ds\Deque::last — Возвращает последнее значение двухсторонней очереди
- Ds\Deque::map — Возвращает результат применения callback-функции ко всем значениям двухсторонней очереди
- Ds\Deque::merge — Возвращает результат добавления всех заданных значений в двухстороннюю очередь
- Ds\Deque::pop — Удаляет и возвращает последнее значение
- Ds\Deque::push — Добавляет значения в конец двухсторонней очереди
- Ds\Deque::reduce — Уменьшает коллекцию до одного значения, используя callback-функцию
- Ds\Deque::remove — Удаляет и возвращает значение по индексу
- Ds\Deque::reverse — Переворачивает текущую двухстороннюю очередь
- Ds\Deque::reversed — Возвращает перевёрнутую копию двухсторонней очереди
- Ds\Deque::rotate — Перематывает двухстороннюю очередь на заданное число значений
- Ds\Deque::set — Заменяет значение по указанному индексу
- Ds\Deque::shift — Удаляет и возвращает первое значение
- Ds\Deque::slice — Возвращает подочередь из заданного диапазона
- Ds\Deque::sort — Сортирует двухстороннюю очередь
- Ds\Deque::sorted — Возвращает отсортированную по значению копию двухсторонней очереди
- Ds\Deque::sum — Возвращает сумму всех значений двухсторонней очереди
- Ds\Deque::toArray — Преобразовывает двухстороннюю очередь в массив (array)
- Ds\Deque::unshift — Добавляет значения в начало двухсторонней очереди

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