跳到主要内容

Lean 向量

介绍

在编程中,向量(Vector)是一种动态数组,能够高效地存储和访问一系列元素。与普通数组不同,向量的大小可以根据需要动态调整,这使得它在处理不确定数量的数据时非常有用。在 Lean 编程语言中,向量是一个重要的数据结构,广泛应用于各种场景。

本文将逐步介绍 Lean 向量的基本概念、操作方法以及实际应用案例,帮助你掌握这一强大的数据结构。

什么是 Lean 向量?

Lean 向量是一种动态数组,它允许你在运行时动态地添加、删除和访问元素。与普通数组相比,向量具有以下优势:

  • 动态大小:向量的大小可以根据需要自动调整。
  • 高效访问:通过索引访问元素的时间复杂度为 O(1)。
  • 灵活操作:支持在任意位置插入和删除元素。

创建 Lean 向量

在 Lean 中,你可以使用 Vector 类型来创建一个向量。以下是一个简单的示例:

lean
def myVector : Vector Nat := Vector.ofList [1, 2, 3, 4, 5]

在这个示例中,我们创建了一个包含 5 个自然数的向量。Vector.ofList 函数将一个列表转换为向量。

访问向量元素

你可以使用索引来访问向量中的元素。Lean 中的索引从 0 开始。以下是一个访问向量元素的示例:

lean
def firstElement : Nat := myVector.get 0

在这个示例中,firstElement 的值将是 1,因为它是向量中的第一个元素。

添加和删除元素

Lean 向量支持在末尾添加元素和删除元素。以下是一些常见的操作:

添加元素

lean
def newVector : Vector Nat := myVector.push 6

在这个示例中,我们将数字 6 添加到向量的末尾,生成一个新的向量 newVector

删除元素

lean
def smallerVector : Vector Nat := myVector.pop

在这个示例中,我们删除了向量的最后一个元素,生成一个新的向量 smallerVector

实际应用案例

案例 1:存储用户输入

假设你正在编写一个程序,需要存储用户输入的一系列数字。由于用户输入的数量不确定,使用向量是一个理想的选择。

lean
def userInputs : Vector Nat := Vector.empty

def addUserInput (input : Nat) : Vector Nat :=
userInputs.push input

在这个案例中,我们使用向量来动态存储用户输入的数字。

案例 2:实现栈数据结构

栈是一种后进先出(LIFO)的数据结构,可以使用向量来实现。

lean
def stack : Vector Nat := Vector.empty

def push (element : Nat) : Vector Nat :=
stack.push element

def pop : Option Nat :=
if stack.isEmpty then
none
else
some (stack.get (stack.length - 1))

在这个案例中,我们使用向量来实现栈的基本操作:pushpop

总结

Lean 向量是一种强大的数据结构,适用于需要动态调整大小的场景。通过本文的介绍,你应该已经掌握了 Lean 向量的基本概念、操作方法以及实际应用案例。

附加资源与练习

  • 练习 1:创建一个包含 10 个随机数的向量,并编写一个函数来计算这些数的平均值。
  • 练习 2:使用向量实现一个队列数据结构,支持 enqueuedequeue 操作。

通过实践这些练习,你将进一步巩固对 Lean 向量的理解。祝你学习愉快!