The Vector class

(PECL ds >= 1.0.0)

Introduction

A Vector is a sequence of values in a contiguous buffer that grows and shrinks automatically. It’s the most efficient sequential structure because a value’s index is a direct mapping to its index in the buffer, and the growth factor isn't bound to a specific multiple or exponent.

Strengths

  • Supports array syntax (square brackets).
  • Uses less overall memory than an tableau for the same number of values.
  • Automatically frees allocated memory when its size drops low enough.
  • Capacity does not have to be a power of 2.
  • get(), set(), push(), pop() are all O(1).

Weaknesses

  • shift(), unshift(), insert() and remove() are all O(n).

Synopsis de la classe

class Ds\Vector implements Ds\Sequence, ArrayAccess {
/* Constantes */
const int MIN_CAPACITY = 10;
/* Méthodes */
public allocate(int $capacity): void
public apply(callable $callback): void
public capacity(): int
public clear(): void
public contains(mixed ...$values): bool
public copy(): Ds\Vector
public filter(callable $callback = ?): Ds\Vector
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\Vector
public merge(mixed $values): Ds\Vector
public pop(): mixed
public push(mixed ...$values): void
public reduce(callable $callback, mixed $initial = ?): mixed
public remove(int $index): mixed
public reverse(): void
public rotate(int $rotations): void
public set(int $index, mixed $value): void
public shift(): mixed
public slice(int $index, int $length = ?): Ds\Vector
public sort(callable $comparator = ?): void
public sorted(callable $comparator = ?): Ds\Vector
public sum(): int|float
public toArray(): array
public unshift(mixed $values = ?): void
}

Constantes pré-définies

Ds\Vector::MIN_CAPACITY

Historique

Version Description
PECL ds 1.3.0 The class now implements ArrayAccess.

Sommaire

add a note add a note

User Contributed Notes 1 note

up
0
fgheorghe at grosan dot co dot uk
8 years ago
It would be great if this class would not be final. A use case where I would want to extend the functionality, would be to enforce Vector items of a certain type - and emulate Java generics. I.e.:
public mixed get ( int $index ) : ClassName
public void set ( int $index , mixed $value ) : ClassName

Thus ensuring my vectors are made strictly of a certain type. I can emulate this behaviour with \ArrayAccess and \Iterator, but given this library is far more efficient I would prefer it over these two interfaces, when defining my datasets.
To Top