【问题标题】:How are elements of a vector left-shifted in Rust?Rust 中向量的元素如何左移?
【发布时间】:2016-07-06 15:09:16
【问题描述】:

在 Rust 中是否有一种安全的方法来左移向量的元素? (vec![1, 2, 3] 左移两位时变为vec![3])。我正在处理Copy 类型,我不想支付比memmove 更高的罚款。

我发现的唯一解决方案是不安全的:直接通过ptr::copy 使用memmove

【问题讨论】:

    标签: vector rust memmove


    【解决方案1】:

    我会使用Vec::drain

    您可以使用一系列要删除的元素调用它,然后它会转移它们。示例:(playpen)

    fn main() {
        let mut v = vec![1, 2, 3];
    
        v.drain(0..2);
    
        assert_eq!(vec![3], v);
    }
    

    另一个注意事项:

    我正在处理Copy 类型,我不想支付比memmove 更高的罚款。

    值得注意的是,在 Rust 中移动始终memcpy,因此Copy 与非Copy 的区别在这里并不重要。如果类型不是Copy 也是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 2016-03-24
      • 1970-01-01
      相关资源
      最近更新 更多