La classe Deque

(PECL ds >= 1.0.0)

Introduction

Un Deque (prononcé “deck”) est une séquence de valeurs dans un tampon contigu qui grandit et rétrécit automatiquement. Le nom est une abréviation courante de “double-ended queue” et est utilisé en interne par Ds\Queue.

Deux pointeurs sont utilisés pour garder une trace d'une tête et d'une queue. Les pointeurs peuvent “enrouler” la fin du tampon, ce qui évite de déplacer d'autres valeurs pour faire de la place. Cela rend shift et unshift très rapides — quelque chose qu'un Ds\Vector ne peut pas concurrencer.

Accéder à une valeur par index nécessite une traduction entre l'index et sa position correspondante dans le tampon : ((head + position) % capacity).

Forces

  • Support de la syntaxe de tableau (crochets).
  • Utilise moins de mémoire globale qu'un tableau pour le même nombre de valeurs.
  • Libère automatiquement la mémoire allouée lorsque sa taille devient suffisamment faible.
  • get(), set(), push(), pop(), shift(), et unshift() sont tous de complexité O(1).

Faiblesses

  • La capacité doit être une puissance de 2.
  • insert() et remove() sont de complexité O(n).

Synopsis de la classe

class Ds\Deque implements Ds\Sequence, ArrayAccess {
/* Constantes */
const int MIN_CAPACITY = 8;
/* Méthodes */
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 pré-définies

Ds\Deque::MIN_CAPACITY

Historique

Version Description
PECL ds 1.3.0 La classe implémente maintenant ArrayAccess.

Sommaire

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top