Esempio n. 1
0
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:
Esempio n. 2
0
#!/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())
Esempio n. 3
0
@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