【问题标题】:Copying a triple nested container复制三重嵌套容器
【发布时间】:2018-02-17 12:50:18
【问题描述】:

我有一个数据结构,我想在函数中制作一个精确的副本。例如,x 已经填满,我想让 y 精确复制。

std::vector<std::list<std::pair<T,K>>> x; // T and K are template parameters
std::vector<std::list<std::pair<T,K>>> y;

由于它的嵌套性质,我对正确的语法是什么感到困惑。到目前为止我有这个,但它显然是不完整的,因为我不确定如何在每个向量索引的列表中访问 pair 的第一个和第二个成员。

for( int i = 0; i < xSize; i++){
    for( auto iter = x[i].begin(); iter != x[i].end(); iter++){
        // copy x into y here
}

有人介意帮我想想我需要做什么吗?谢谢。

【问题讨论】:

  • 由于pair 不是容器,因此您没有“三重嵌套容器”。
  • 不。标准容器可以为您做到这一点。
  • 请不要破坏您的帖子。谢谢!

标签: c++ iterator hashtable nested-loops


【解决方案1】:

如果 T 和/或 K 是用户定义的类型并且包含任何指针,那么您需要为该类型重载赋值运算符(遵循规则 5)。休息是在 STL 上,因为 STL 的容器有 = 运算符的实现,并且正如其他人提到的,只是做“y = x;”就够了。

【讨论】:

    【解决方案2】:

    只需以下几点:

    y = x;
    

    【讨论】:

      【解决方案3】:

      要使y 完全等于x,请使用以下代码:

      y = x;
      

      【讨论】:

      • 嗯...如果 T 或 K 是指针类型,这仍然有效吗?我的意思是,肯定会复制地址,但“x”和“y”中的指针会指向同一个位置。
      • @vishal-wadhwa:是的,当然,我希望指针的两个副本指向同一个东西。这就是使它们成为“副本”的原因。
      猜你喜欢
      • 2011-12-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2012-02-02
      • 2021-12-31
      相关资源
      最近更新 更多