gpt4 book ai didi

rust - Rust 中相对向量大小调整的一行代码

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

如果我想在 C++/Swift/任何其他语言中调整向量的大小,我通常会写这样的东西 my_vec.resize(my_vec.size(), 0x00); 但是如果我在Rust 我得到错误 immutable borrow occurs here

当然我可以这样写:

let old_size = my_vec.len();
my_vec.resize(old_size - 2, 0x00);

但我很确定有一条线...

最佳答案

您目前无法按照 Cannot borrow as immutable because it is also borrowed as mutable in function arguments 中的描述将两行合二为一。 .

but I'm pretty sure that there is an one-liner...

当然:

{ let old_size = my_vec.len(); my_vec.resize(old_size - 2, 0x00); }

不那么厚颜无耻,你可以添加一个特征方法:

trait ResizeRelative<T> {
fn resize_relative(&mut self, delta: isize, default: T);
}

impl<T: Clone> ResizeRelative<T> for Vec<T> {
fn resize_relative(&mut self, delta: isize, default: T) {
let len = if delta < 0 {
self.len() - ((-delta) as usize)
} else {
self.len() + delta as usize
};

self.resize(len, default);
}
}

fn main() {
let mut v = Vec::new();
v.resize_relative(3, 42);
v.resize_relative(-1, 2);
println!("{:?}", v);
}

请注意您需要执行的旋转才能在两个方向上调整大小。即便如此,如果您将大小调整到零以下,仍有可能出现 panic 。

关于rust - Rust 中相对向量大小调整的一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45465875/

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