gpt4 book ai didi

c++ - 从 Vector 中删除 unique_ptr 并将它们用作新 Struct 的参数

转载 作者:行者123 更新时间:2023-11-30 01:03:12 25 4
gpt4 key购买 nike

移动std::unique_ptr<...>()的语法我有点难以理解,我找不到一个明确的答案(至少对我来说),关于我应该如何移动 unique_ptr。

我有一些堆分配的节点,我想创建新的节点,这些节点有两个已经存在的节点作为子节点。又应该将其插入 vector 中。

#include <memory>
#include <vector>

template <typename T>
struct Node{
std::unique_ptr<Node<T>> left, right;
Node(std::unique_ptr<Node<T>> left, std::unique_ptr<Node<T>> right){
this->left = left;
this->right = right;
}
}

template <typename T>
void foo(){
std::vector<std::unique_ptr<Node<T>>> vec;
//...
vec.insert(vec.begin() + idx, std::unique_ptr<Node<T>>(new Node<T>(vec.at(vec.begin() + idx), vec.at(vec.begin() + idx + 1))));
}

我只收到错误消息,没有找到匹配的函数调用。

expression.hpp:69:58: error: no matching function for call to ‘std::vector<std::unique_ptr<Node<int>, std::default_delete<Node<int> > >, std::allocator<std::unique_ptr<Node<int>, std::default_delete<Node<int> > > > >::at(__gnu_cxx::__normal_iterator<std::unique_ptr<Node<int>, std::default_delete<Node<int> > >*, std::vector<std::unique_ptr<Node<int>, std::default_delete<Node<int> > >, std::allocator<std::unique_ptr<Node<int>, std::default_delete<Node<int> > > > > >)’

有人可以帮忙,或者有想法,我可以在哪里寻找正确的语法,以及我应该使用哪个移动/复制函数?

最佳答案

vec.at(vec.begin() + idx)

看一下 at 的声明。参数类型是 size_type(整数类型)。您正在尝试传递一个迭代器。

关于c++ - 从 Vector 中删除 unique_ptr 并将它们用作新 Struct 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54349013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com