標準ライブラリ 続き
ベクタ
ベクタは単に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]
できた(しない