kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

標準ライブラリ 続き

ベクタ

ベクタは単にpythonの配列だったことが判明しましたのでそのまま使います
クラス作る必要はまったくないけど練習で
おかげで[]オーバーロード?できるようになってることを知るなど

class Vector():
    def __init__(self):
        self.v = []

    # []によるアクセス
    def __getitem__(self, i):
        return self.v[i]

    # 同上
    def __setitem__(self, i, val):
        self.v[i] = val

    def size(self):
        return len(self.v)

    def push_back(self, x):
        self.v.append(x)

    def pop_back(self):
        return self.v.pop()

    # beginとendの代わり
    def __iter__(self):
        return iter(self.v)

    # C++のvectorではイテレータで位置を指定するのでちょっと違う
    def insert(self, p, x):
        self.v.insert(p, x)

    # 同上
    def erase(self, p):
        del self.v[p]

    def clear(self):
        self.v.clear()

型がチェックされないということはこういうこともできるかな

class Foo():
    def __init__(self, a):
        self.a = a

    def __getitem__(self, f):
        return list(map(f, self.a))

a = Foo([1, 2, 3])
print(a[lambda x: x * 2]) # => [2, 4, 6]

できた(しない