ConFoo 2025

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

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top