rustlings 学习笔记 -- exercises/05_vecs

exercises/05_vecs

vecs1.rs - 向量创建与宏

问题代码

rust 复制代码
fn array_and_vec() -> ([i32; 4], Vec<i32>) {
    let a = [10, 20, 30, 40]; // Array

    // TODO: Create a vector called `v` which contains the exact same elements as in the array `a`.
    // Use the vector macro.
    // let v = ???;

    (a, v)
}

fn main() {
    // You can optionally experiment here.
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_array_and_vec_similarity() {
        let (a, v) = array_and_vec();
        assert_eq!(a, *v);
    }
}

解题要点

  • 错误原因 : 缺少向量 v 的定义,需要创建与数组相同元素的向量
  • 解决方法 : 使用 vec! 宏创建向量

正确写法

rust 复制代码
fn array_and_vec() -> ([i32; 4], Vec<i32>) {
    let a = [10, 20, 30, 40]; // Array

    let v = vec![10, 20, 30, 40];

    (a, v)
}

fn main() {
    // You can optionally experiment here.
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_array_and_vec_similarity() {
        let (a, v) = array_and_vec();
        assert_eq!(a, *v);
    }
}

vecs2.rs - 向量操作与循环

问题代码

rust 复制代码
fn vec_loop(input: &[i32]) -> Vec<i32> {
    let mut output = Vec::new();

    for element in input {
        // TODO: Multiply each element in the `input` slice by 2 and push it to
        // the `output` vector.
    }

    output
}

fn main() {
    // You can optionally experiment here.
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_vec_loop() {
        let input = [2, 4, 6, 8, 10];
        let ans = vec_loop(&input);
        assert_eq!(ans, [4, 8, 12, 16, 20]);
    }
}

解题要点

  • 错误原因: for 循环体为空,需要将每个元素乘以 2 并添加到输出向量
  • 解决方法 : 使用 push() 方法将处理后的元素添加到向量

正确写法

rust 复制代码
fn vec_loop(input: &[i32]) -> Vec<i32> {
    let mut output = Vec::new();

    for element in input {
        output.push(element * 2);
    }

    output
}

fn main() {
    // You can optionally experiment here.
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_vec_loop() {
        let input = [2, 4, 6, 8, 10];
        let ans = vec_loop(&input);
        assert_eq!(ans, [4, 8, 12, 16, 20]);
    }
}

知识点汇总

向量基础

  • 向量创建 : 使用 vec! 宏创建向量,如 vec![1, 2, 3]
  • 向量类型 : Vec<T> 表示可变长度的集合,T 为元素类型
  • 向量初始化 : 使用 Vec::new() 创建空向量

向量操作

  • 添加元素 : 使用 push() 方法向向量末尾添加元素
  • 循环遍历 : 使用 for 循环遍历向量元素
  • 切片引用 : 函数参数使用 &[i32] 接受数组或向量切片

向量特性

  • 动态大小: 向量可以在运行时动态增长或缩小
  • 内存管理: 向量在堆上分配内存,支持动态调整
  • 类型推断: 编译器可以根据元素推断向量类型
相关推荐
doiito5 分钟前
【AI 应用】从“外国人味”到地道中文:kokoroi-rs v0.1.2 架构升级深度解析
ai·rust·系统设计
Zwarwolf5 小时前
Rust零散知识点项目汇总
开发语言·rust
X档案库6 小时前
【开源】我做了一套可以 AI 托管的 Markdown 博客与知识库
rust·博客·markdown·marksharex
程序员爱钓鱼11 小时前
Rust Vec 动态数组详解:创建、增删、遍历与排序
前端·后端·rust
_abab11 小时前
Rust重塑系统编程:从Linux内核到AI推理引擎的2026全景解析
linux·人工智能·rust
doiito1 天前
【Agent Harness】Gliding Horse 高级认知优化:让 Agent 的“大脑”和“免疫系统”真正协同
ai·rust·架构设计·系统设计·ai agent
longxiangam1 天前
第 4 篇:Embassy 异步运行时与事件驱动架构
单片机·嵌入式硬件·rust
程序员爱钓鱼1 天前
Rust String 与 &str 详解:字符串所有权、借用与转换
前端·后端·rust
段一凡-华北理工大学2 天前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
大卫小东(Sheldon)2 天前
小鹤音形词典:一个用 Rust 写的离线编码查询桌面工具
ai·rust