Класс Deque

(No version information available, might only be in Git)

Введение

Двухсторонняя очередь - это последовательность значений в непрерывном буфере, который растет и уменьшаются автоматически. 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).

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

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

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

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 — Добавляет значения в начало двухсторонней очереди