c++ - 如何将一个对象的列表复制到另一个对象的列表
问题描述
我想将所有属性、列表和子树从一个对象复制到另一个对象。但是我无法复制列表及其所有元素。我该怎么做?
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)
};
解决方案
使用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>();
...
}
推荐阅读
- python-3.x - 无法在 selenium webdriver“Python”中使用 find_by 方法展开按钮
- reactjs - 与 Antd form 3.0x 反应 props.form.getFieldsValue() 总是空对象
- python - 如何从 pydantic 模型中的数据库中仅返回一列作为列表?
- r - 在使用闪亮的仪表板时,我们如何让数据表出现在主面板中?
- reactjs - 用户登录react js时如何授权?
- wordpress - 阻止具有源的帧访问跨域帧错误
- javascript - 无法在函数内部再次调用 api
- angular - 使用 NgRx Router Store 在同一页面上导航时调度操作
- unit-testing - 如何使用测试库测试复杂的父子通信
- docker-compose - docker-compose 在 jupyter notebook 添加端口以浏览输出