如何将指针列表插入到指针-指针列表中?

How to insert a pointer list into a pointer-pointer list?

提问人:Daniel 提问时间:1/8/2020 更新时间:1/8/2020 访问量:182

问:

假设我有这两个带有指针的列表。

list<Node **> open;
list<Node *> new_children;

我想用指向 元素的指针填充:list<Node **> openlist<Node *> new_children

for (Node * n : new_children)
{
    open.emplace_front(&n);
}

在此之后,如果我写出 open 的元素:

for (auto o : open)
{
    (**o).dump();
}

我一次又一次地得到相同的元素。为什么?

列表 指针

评论


答:

0赞 Zig Razor 1/8/2020 #1

这段代码是错误的:

for (Node * n : new_children)
{
    open.emplace_front(&n);
}

您需要使用push_front:

for (Node * n : new_children)
{
    open.push_front(&n);
}

做你想做的事。

0赞 Daniel 1/8/2020 #2

我想我解决了它。当我遍历时,每个都是一个副本,这在指针的情况下并不幸运。因此,正确的方法是通过引用遍历,并基于内存地址创建指针。就我而言,另一个问题是我在函数中创建,所以当我离开本地范围时,我得到了悬空的指针。为此,解决方案是使用 .实际上工作正常。new_childrenNode * nNode **Node **Node **newemplace_front()

for (auto & n : new_children)
{
    Node ** new_open = new Node *(n);
    open.emplace_front(new_open);
}