函数不接受autoptr的迭代器
function wont accept iterator to auto_ptr
我写了一些有缺陷的Huff压缩代码,试图修复这些代码。我做的第一件事是将指针切换到auto_ptr
(我没有使用另一个智能指针是有原因的)。我创建了一个auto_ptr
的向量,但当我试图通过*(vector.begin())
将auto_ptr传递给函数时,它不起作用。
我试图将所有权传递给的函数代码(它是一个成员函数,作为set_node):
struct Node {
int weight;
char litteral;
auto_ptr<Node> childL;
auto_ptr<Node> childR;
void set_node(int w, char l, auto_ptr<Node>& L(), auto_ptr<Node>& R()){
weight = w;
litteral = l;
childL = L;
childR = R;
}
};
我试着这样称呼它(p是一个节点):
p.set_node(w, '*', *nodes->begin(), *(nodes->begin()+1));
这就是矢量的声明方式:
vector<auto_ptr<Node> >* nodes = new vector<auto_ptr<Node> >;
您不能在std::vector
中使用std::auto_ptr
。你需要找到一个替代方案。问题是std::auto_ptr
中没有副本。复制构造函数在某种意义上是一个move操作,它从原始自动指针中窃取内容并将其移动到新指针。该操作要求源是一个非常量std::auto_ptr
(因为它从中删除了托管对象)。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 函数不接受autoptr的迭代器