You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中无需可变变量,从Vec<T>和T创建新Vec<T>的方法

解决方案

Rust标准库提供了几种不用可变变量就能完成这个需求的方式,无需手动实现:

方法1:利用迭代器链(可选择保留原向量所有权)

如果不需要保留原向量a的所有权,直接把a转成迭代器,再和单个元素的迭代器链接后收集成新向量即可:

let a: Vec<i32> = vec![1, 2, 3];
let b: i32 = 4;
let c: Vec<i32> = a.into_iter().chain(std::iter::once(b)).collect();

要是还想继续使用a,就用iter().copied()(适用于实现Copy的类型)或者iter().cloned()(适用于实现Clone的类型)来复制元素:

let a: Vec<i32> = vec![1, 2, 3];
let b: i32 = 4;
// T实现Copy时用copied
let c: Vec<i32> = a.iter().copied().chain(std::iter::once(b)).collect();
// T实现Clone时用cloned
let c: Vec<i32> = a.iter().cloned().chain(std::iter::once(b)).collect();

方法2:使用vec![]宏的扩展语法(Rust 1.55+)

从Rust 1.55版本开始,vec!宏支持用..扩展现有向量的元素,写法更简洁:

let a: Vec<i32> = vec![1, 2, 3];
let b: i32 = 4;
let c: Vec<i32> = vec![..a, b];

这个语法会把a的元素所有权转移到新向量,之后a就无法再使用;如果要保留a的所有权,先克隆a再扩展即可:

let a: Vec<i32> = vec![1, 2, 3];
let b: i32 = 4;
let c: Vec<i32> = vec![..a.clone(), b];

这些方法都属于标准库范畴,全程不需要使用可变变量,也不用自己写追加逻辑。

内容的提问来源于stack exchange,提问作者0x1a4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 08:54:25