if __name__ == '__main__': # 定义一个初始长度为10的向量A, 可用位置数为10. A = Vector(10) # 下标i从0到A.size()-1对A中每个元素赋值i. # 由于python的list可以放置任何类型元素 # 向量的下标用法与数组相同, 但要注意应保证向量中实有元素个数就是size(). for i in range(A.size()): A[i] = i for i in range(A.size()): A[i] = 1 # 定义一个长度为5的向量B, 初始元素全为3. B = Vector(5, 3) # 在向量B末尾加入100个2. B.resize(B.size() + 100, 2) # 在向量V的尾部加入4 B.push_back(4) # 迭代器的另一种用法,使用列表推导 B = Vector([value * 2 for i, value in enumerate(B)]) # 若向量B不为空,则持续输出其尾部元素并删除之 while not B.empty(): # 输出向量V的末尾元素 print(B.back()) # 删除向量V的末尾元素 B.pop_back() # 接收未知长度的自然数输入序列, 以负数作为输入终止 C = Vector() # 基于push_back操作的速度非常快. while True:
#!/usr/bin/env python # encoding: utf-8 """ @author: HuRuiFeng @file: doubling.py @time: 2019/2/13 21:55 @desc: 第25讲:容量之妙-向量容量是高效的来源 """ from common_lib.vector import Vector if __name__ == '__main__': n = 40 #size()返回当前元素个数, capacity()返回当前容量 A = Vector() for i in range(n): print(A.size(), A.capacity()) A.push_back(0) print(A.size(), A.capacity()) B = Vector() # 提前预留容量n. B.resize(n) for i in range(n): print(B.size(), B.capacity()) B.push_back(0) print(B.size(), B.capacity())
@file: buffer.py @time: 2019/4/20 18:05 @desc: 第35讲: 循环队列-讲清来龙去脉 需要考虑push(x), pop(), full(), empty() """ from queue import Queue from common_lib.vector import Vector if __name__ == '__main__': buffer = Vector() # 容量取10 C = 10 # 真实buffer长度为N N = C + 1 buffer.resize(N) # 初值任选buffer中的一个有效位置 front = int(N / 2) # 这里都取N / 2 rear = int(N / 2) x = 0 # 当buffer不满, 持续放入0, 1, ... , C - 1 # 代替取模运算front = (rear+1) % N while (rear + 1 != front if rear + 1 < N else 0 != front): buffer[rear] = x x += 1 # 下面的操作比rear = (rear + 1) % N更快 if rear < C: rear += 1 else: rear = 0