【问题标题】:How to clone a vector with struct items in it (rust)?如何克隆包含结构项目的向量(锈)?
【发布时间】:2021-11-24 11:01:00
【问题描述】:

如何在Rust 中克隆带有结构项的向量。

我试过.to_vec()它,但似乎我不能,因为我正在使用结构。

struct Abc {
    id: u32,
    name: String
}

let mut vec1: Vec<Abc> = vec![];

let item1 = Abc {
    id: 1,
    name: String::from("AlgoQ")
}

vec1.push(item1)

let vec2 = vec1.to_vec();

错误:

the trait bound `blabla::Abc: Clone` is not satisfied
the trait `Clone` is not implemented for `blabla::Abc`rustc(E0277)

【问题讨论】:

    标签: vector rust clone traits


    【解决方案1】:

    要克隆VecVec 中的类型还必须实现Clone 特征。 最简单的方法是使用derive 宏,如here 所示。

    在您的示例中,您只需在 Abc 结构上方添加 #[derive(Clone)]

    【讨论】:

      【解决方案2】:

      您可以像对基元一样对结构对象执行此操作,但向量元素的结构必须实现 Clone 特征才能使向量可克隆。

      正如编译器所说的那样

      您可以使用#[derive()] macro 轻松实现trait,除非您不想使用自定义实现,如下所示

      #[derive(Clone)]
      struct Abc {
          id: u32,
          name: String
      }
      
      fn main(){
          let mut vec1= vec![];
      
          let item1 = Abc {
              id: 1,
              name: String::from("AlgoQ"),
          };
          vec1.push(item1);
      
          let vec2 = vec1.clone();
          
      }
      

      Demo

      【讨论】:

        猜你喜欢
        • 2012-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-26
        • 2013-07-12
        • 1970-01-01
        • 2014-03-22
        • 1970-01-01
        相关资源
        最近更新 更多