0

我有一个简单的 C++ Node 类,它包含指向同一类型的指针的数组数据成员。这个数组是动态分配的,它的指针应该默认为 null 但我不知道如何实现它。

class Node
{
private:
    Node *_nextNode[];
    string _data;
}

Node::Node( const string &p_data, const int &p_levels ): _data(p_data)
{
   //unsure how to initialize the '_nextNode[]' member so that the size of the array is of p_levels and they all default to null pointers 
}

class SkipList
{
    private:

}
4

3 回答 3

2

使用std::vector<Node*>

Node::Node( const string &p_data, const int &p_levels ): 
    _data(p_data),
    _nextNode(p_levels)
{

这将初始化_nextNodetonullptr的元素。

考虑使用智能指针实现,而不是为您管理实例Node*的销毁。Node


如果你必须使用 aNode*那么你需要 aNode**指向一个列表Node*

class Node
{
private:
    Node**_nextNode;
    string _data;
};

Node::Node( const string &p_data, const int &p_levels ): 
    _data(p_data),
    _nextNode(new Node*[p_levels]())
{                              //^^ value initialization.

int*分配一个包含元素的数组,p_levels并且 value 初始化它们(将它们设置为NULL)。Node需要知道存储了多少元素,_nextNode因此p_levels也需要存储。破坏:

for (int i = 0; i < _nextNodeElements; i++)
{
    delete _nextNode[i]; // delete NULL is safe, a no-op.
}
delete[] _nextNode;

只是为了std::vector再次推动你:std::vector<std::unique_ptr<Node>> _nextNode;不需要手写的析构函数,默认生成的就足够了。

于 2013-05-04T20:26:05.587 回答
1
_nextNode = new Node[pLevels];
memset ( _nextNode, 0, sizeof (_nextNode));

这是你想要的吗?此外,您应该声明Node *_nextNode[]Node *_nextNode 并且您还必须<string.h>包括memset

于 2013-05-04T20:26:03.037 回答
0

尝试使用 Node **_nextNode 而不是 Node *_nextNode[]。

Node **_nextNode= new (NODE**)[ArraySize];
for (int i = 0; i < rows; ++i) {
 _nextNode = NULL;

}

于 2013-05-04T21:05:33.933 回答