vector implementation

 avatar
unknown
python
2 months ago
1.6 kB
9
Indexable
from typing import Generic, TypeVar

T = TypeVar("T")


class ArrayList(Generic[T]):
    def __init__(self, capacity: int = 5):
        self.capacity = capacity
        self._arr: list[T | None] = [None] * self.capacity
        self.length = 0

    def _bounds_check(self, index: int):
        if not (0 <= index < self.length):
            raise ValueError("Index out of bounds")

    def _realloc_check(self):
        if self.length >= self.capacity:
            self.temp = self._arr
            self.capacity *= 2
            self._arr = [None] * self.capacity
            for i, element in enumerate(self.temp):
                self._arr[i] = element

    def append(self, value: T):
        self._realloc_check()
        self._arr[self.length] = value
        self.length += 1

    def pop(self):
        self.length -= 1

    def __setitem__(self, index: int, value: T):
        self._bounds_check(index)
        self._arr[index] = value

    def __getitem__(self, index: int) -> T | None:
        self._bounds_check(index)
        return self._arr[index]

    def __len__(self) -> int:
        return self.length

    def __iter__(self):
        for item in self._arr[: self.length]:
            yield item


def main():
    a = ArrayList[int](4)
    a.append(3)
    a.append(4)
    a.append(9)
    print(len(a._arr))
    a.append(3)
    print(len(a._arr))
    a.append(7)
    print(len(a._arr))
    a.append(1)
    print(len(a._arr))
    for item in a:
        print(item, end=" ")
    print()
    print(a[5])
    a[3] = 111
    print(a[3])


if __name__ == "__main__":
    main()
Editor is loading...
Leave a Comment