首页 > 解决方案 > 如何将一个对象的列表复制到另一个对象的列表

问题描述

我想将所有属性、列表和子树从一个对象复制到另一个对象。但是我无法复制列表及其所有元素。我该怎么做?

SPSTTree copyTree(SPSTTree original)
{

    SPSTTree copy = (SPSTTree) malloc(sizeof(SPSTNode));

    // Copy non-pointer values
    copy->Element = original->Element;
    copy->offset = original->offset;
    copy->qtd_element = original->qtd_element;
    copy->list = original->list; // HOW TO COPY ALL THE ELEMENTS IN THE LIST??

    // Recursively copy subtrees
    if(original->lchild) {
        copy->lchild = copyTree(original->lchild);
    } else {
        copy->lchild = NULL;
    }
    if(original->rchild) {
        copy->rchild = copyTree(original->rchild);
    } else {
        copy->rchild = NULL;
    }

    return copy;
}

SPSTNode和ElementList的定义

struct ElementList{
    int value;
    int position;
};

struct SPSTNode{
    ElementType Element;
    int64_t offset;
    SPSTTree lchild;
    SPSTTree rchild;

    int qtd_element = 1; // usado para multiplicidade em caso de duplicidade na inserção
    std::list<ElementList> list; //(Element, position)

};

标签: c++list

解决方案


使用std::copy复制列表。

std::copy(original->list.begin(), original->list.end(), std::back_inserter(copy->list));

malloc 是一个问题,因为您跳过了对象创建。您是否以某种方式连接 C 代码并被迫做这样的事情?从您的代码段看来,您可以改用std::unique_ptr

std::unique_ptr<SPSTTree> copyTree(const SPSTTree& original)
{

    auto copy = std::make_unique<SPSTTree>();
...
}

推荐阅读