gpt4 book ai didi

vector - 通过消耗两个向量来创建新向量的好方法是什么?

转载 作者:行者123 更新时间:2023-11-29 07:49:20 25 4
gpt4 key购买 nike

我想要一个很好的函数来创建一个新的向量,并传达参数向量不再相关并且应该被销毁,取得它们的所有权。我并不特别希望必须使任何一个参数可变(使用 appendextendpush_all 从而改变调用签名)。代码 ( playpen link ):

fn main () {
let arg1 = vec![1, 2, 3];
let arg2 = vec![4, 5, 6];
let desired = consume_and_concat(arg1, arg2);
assert_eq!(desired, vec![1, 2, 3, 4, 5, 6]);
}

fn consume_and_concat(vec1: Vec<i32>, vec2: Vec<i32>) -> Vec<i32> {
// something nice here
}

我知道 Vec 没有 +。在 Ruby 中,我会执行 vec1 + vec2vec1.concat(vec2)[vec1, vec2].flatten。是否有我缺少的类似优雅的东西?

最佳答案

我想你在找Extend::extend

fn main() {
let mut arg1 = vec![1, 2, 3];
let arg2 = vec![4, 5, 6];
arg1.extend(arg2);
assert_eq!(arg1, vec![1, 2, 3, 4, 5, 6]);
}

在这里,我们可以重用从 arg1 分配的空间,但是对于通过 arg2 分配的空间,没有什么可以有效地完成的。有关更具体到您的原始问题的示例:

fn main() {
let arg1 = vec![1, 2, 3];
let arg2 = vec![4, 5, 6];
let desired = consume_and_concat(arg1, arg2);
assert_eq!(desired, vec![1, 2, 3, 4, 5, 6]);
}

fn consume_and_concat(mut vec1: Vec<i32>, vec2: Vec<i32>) -> Vec<i32> {
vec1.extend(vec2);
vec1
}

关于vector - 通过消耗两个向量来创建新向量的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32086476/

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