如何将TrieNodes子元素的所有元素初始化为空



我正试图解决一个Trie问题,为此我创建了一个TrieNode类,如下所示:

class TrieNode {
public:
bool isWord;
TrieNode* children[26];
TrieNode() {
isWord=false;
memset(children, NULL, sizeof(children));    //results in warning
};
};

这会导致一个警告:

警告:给void* memset(void*, int, size_t)的非指针参数2传递NULL [-Wconversion-null]

nullptr替换它会导致编译时错误:

错误:无法将'std::nullptr_t'转换为'int',因为参数'2'为'void* memset(void*, int, size_t)'

所以我的问题是,我如何将children中的所有值初始化为NULL/nullptr?我尝试了一些选项,如children[26]={ nullptr };,但这些都导致运行时错误(仅与memset(children, NULL, sizeof(children));工作良好)。

最后,在构建树时,我希望有以下逻辑:
if(!curr->children[index]) {
curr->children[index]=new TrieNode();
}
curr=curr->children[index];

你可以这样做:

class TrieNode
{
public:
bool isWord = false;
TrieNode* children[26]{};
TrieNode() = default;
};

最简单的c++选项是std::fill(std::begin(array), std::end(array), nullptr)

绕过这个问题的方法之一是传递0代替NULL,因为根据函数原型,第二个参数应该是一个整数。

memset(children, 0, sizeof(children));

参考这个,以防混淆0和NULL:NULL, ''和0 ?

相关内容

  • 没有找到相关文章

最新更新