【问题标题】:How to create an array of pointers to structure using new?如何使用new创建指向结构的指针数组?
【发布时间】:2019-11-30 13:36:07
【问题描述】:

我正在尝试使用链表样式的节点创建一个图形,其中每个节点都是一个结构,其中包含一个键和下一个节点的地址,但我想将多个节点连接到一个节点,所以我尝试创建一个指针数组使用 new 动态构造和初始化它们,但它会抛出一个错误,说它“无法在赋值中将 node*** 转换为 node**”。

我曾尝试使用struct node* next[],但效果不佳。我在这里想念什么?我应该只使用指针向量而不是数组吗?

struct node
{
    int key;
    struct node** next;
};
int main()
{
    struct node A;
    A.key = 12;
    A.next = new node**[2];
    return 0;
}

【问题讨论】:

  • 如果可以的话,我只会使用矢量。它会让生活更轻松。
  • 试试A.next = new node*[2];,它会创建一个包含 2 个指针的数组
  • 如果你不使用向量,我相信node**[2] 是你的问题,因为数组语法意味着next 是指向第一个node** 元素的指针。 (node***)

标签: c++ pointers data-structures


【解决方案1】:

我应该只使用指针向量而不是数组吗?

这通常是一个理想的解决方案。这将解决您的程序存在的内存泄漏(或者如果它首先编译的话)。一个例子:

struct node
{
    int key;
    std::vector<node*> next;
};

// usage
A.next.resize(2);

Vector 确实有空间开销,这对于大图来说可能是个问题,因为总开销与节点数量成线性关系。如果向量不适合您,则可以选择std::unique_ptr,与裸指针相比,它没有任何开销:

struct node
{
    int key;
    std::unique_ptr<node[]> next;
};

// usage
A.next.reset(new node*[2]);
new node**[2];

我在这里错过了什么?

当您需要 node* 数组时,您正尝试创建 node** 数组。

【讨论】:

  • @CompuChip 但这会改变所有权语义,并且在 OP 需要多个节点“加入”为一个的情况下不起作用。
  • 请注意,std::vector&lt;node*&gt; 的开销至少有一部分是大小。如果是静态的,您可以使用std::array&lt;node *, 2&gt;,否则您需要将其记录在某处
【解决方案2】:

我应该只使用指针向量而不是数组吗?

是的!

包含向量库后,在您的结构中,您将拥有这样的成员:

std::vector<node*> next;

这是 C++ 方法,使用原始指针是 C 方法。

不过,作为百科全书信息,使用原始指针,您可以:

A.next = new node*[2];

这意味着一个由两个指针组成的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2017-06-03
    相关资源
    最近更新 更多