gpt4 book ai didi

vector - 在不改变向量的情况下返回 Rust 中向量的最后 n 个元素

转载 作者:行者123 更新时间:2023-11-29 08:01:52 24 4
gpt4 key购买 nike

我正在努力寻找一种方法来从向量的末尾获取两个值,对这些值求和,然后将总和插入向量。

我发现 poptruncatedrain 不起作用,因为它们从原始向量中删除了值。

fn main() {
println!("Which Fibonacci number would you like to find?");

let mut fib_num = String::new();

io::stdin().read_line(&mut fib_num)
.expect("Failed to read line");

let fib_num: u32 = fib_num.trim().parse()
.expect("Please enter a number");

let mut stored_nums: Vec<u32> = vec![0, 1];

while fib_num > stored_nums.len() as u32 {
let mut limit = stored_nums.len();
let mut new_num1 = stored_nums.pop().unwrap();
let mut new_num2 = stored_nums.pop().unwrap_or(0);
stored_nums.push(new_num1 + new_num2);
}
}

最佳答案

您需要考虑向量没有两个项的情况。

我会使用像 Iterator::rev 这样的迭代器适配器和 Iterator::take然后以 Iterator::sum 结束:

let sum = stored_nums.iter().rev().take(2).sum();
stored_nums.push(sum);

这使您可以避免显式处理向量/切片/迭代器太短但代码仍然隐式处理的情况。


你也可以直接索引切片:

let len = stored_nums.len();
let sum = stored_nums[len - 1] + stored_nums[len - 2];
stored_nums.push(sum);

但是,如果元素少于 2 个,这将 panic。

在这种情况下,您可以尝试处理向量太短的问题,但这有点冗长:

fn add_last_two(nums: &[u32]) -> Option<u32> {
let len = nums.len();

let idx_a = len.checked_sub(1)?;
let idx_b = len.checked_sub(2)?;

let a = nums.get(idx_a)?;
let b = nums.get(idx_b)?;

Some(a + b)
}

fn main() {
let mut stored_nums: Vec<u32> = vec![0, 1];
let sum = add_last_two(&stored_nums).unwrap_or(0);
stored_nums.push(sum);
}

请注意,使用 a Fibonacci iterator 可能会更好并将其收集Vec中。

关于vector - 在不改变向量的情况下返回 Rust 中向量的最后 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44549759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com