在类定义中初始化结构数组

时间:2019-12-04 20:53:13

标签: c++ data-structures

我有一个结构可以为这样的BST创建节点

struct BSTNode{
    int data;
    BSTNode *left;
    BSTNode *right;
};

我需要在类内部创建这些根节点的数组

class HashBST{
public:
    bool lookup(int);
    void insert(int);
    bool remove(int);
    float getLoad();
//private:
    int hash(int);

    BSTNode *table[1019];
    float load;
    int occupied = 0;
    int tableSize = 1019;
};

从那里我希望能够检查并查看BST节点是否具有条目。最初,我尝试在结构定义中将data int设置为-1,但是在类的数组中,每个节点都有一个垃圾数据值。

是否有一种方法可以将所有数据值设置为-1,或更理想的方法是将table数组中的所有指针都设置为NULL,直到其中存储了一些指针?

2 个答案:

答案 0 :(得分:-1)

  

是否可以将所有数据值设置为-1,

并不是因为节点的设计暗示了哈希表的特定设计。由于您有节点,这意味着您使用separate chaining来解决哈希表冲突。

这意味着您的存储区数组table需要使用空指针进行初始化,否则它将包含不确定的值:

BSTNode* table[1019] = {}; // Zero-initialize buckets.

然后lookup成员函数将如下所示:

bool HashBST::lookup(int value) {
    unsigned value_hash = hash(value); // Hash must be an unsigned value.
    unsigned index = value_hash % tableSize;
    for(BSTNode* node = table[index]; node; node = node->right) {
        if(node->data == value)
            return true;
    }
    return false;
}

在更高级的版本中,存储桶表应该只是指针BSTNode* table;,其指针将以new[]的结果进行初始化,所引用表的大小在tableSize中。

答案 1 :(得分:-1)

这是我将以C ++友好的方式进行的操作:

首先,将dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [self presentViewController:popUpController animated:NO completion:^{ self->interactionDisabledLayer.alpha = 0.0f; }]; }); 转换为table

std::vector

std::vector<BSTNode*> table创建一个构造函数,该构造函数使用所有nullptr值初始化HashBst

std::vector<T*>