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]
相关产品推荐
相关产品推荐

