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] 接受数组或向量切片

向量特性

  • 动态大小: 向量可以在运行时动态增长或缩小
  • 内存管理: 向量在堆上分配内存,支持动态调整
  • 类型推断: 编译器可以根据元素推断向量类型
相关推荐
番茄灭世神19 小时前
Rust学习笔记第2篇
rust·编程语言
shimly1234561 天前
(done) 速通 rustlings(20) 错误处理1 --- 不涉及Traits
rust
shimly1234561 天前
(done) 速通 rustlings(19) Option
rust
@atweiwei1 天前
rust所有权机制详解
开发语言·数据结构·后端·rust·内存·所有权
shimly1234561 天前
(done) 速通 rustlings(24) 错误处理2 --- 涉及Traits
rust
shimly1234561 天前
(done) 速通 rustlings(23) 特性 Traits
rust
shimly1234561 天前
(done) 速通 rustlings(17) 哈希表
rust
shimly1234561 天前
(done) 速通 rustlings(15) 字符串
rust
shimly1234561 天前
(done) 速通 rustlings(22) 泛型
rust