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

Rust中能否用移动操作替代Vector元素交换?

解答

完全可以在Rust中实现类似C++的移动操作,且在元素移动开销远小于交换开销的场景下,这种优化是值得的。

具体实现方式

你可以利用Rust的所有权语义,通过std::mem或指针工具实现移动替代swap:

安全实现(要求T: Default)

如果元素类型实现了Default,可以用mem::take直接移动元素,同时将原位置替换为默认值:

use rand::{thread_rng, Rng};
use std::mem;

fn keep_n_rand<T: Default>(x: &mut Vec<T>, n: usize) {
    let mut rng = thread_rng();

    for i in n..x.len() {
        let j = rng.gen_range(0..i);
        if j < n {
            // 将x[i]的所有权移动到x[j],x[i]
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:40:41