如何将 TrieNodes 子节点的所有元素初始化为 null
How do I initialize all elements of TrieNodes' children to null
我正在尝试解决一个 Trie 问题,为此我创建了一个 TrieNode
class,如下所示:
class TrieNode {
public:
bool isWord;
TrieNode* children[26];
TrieNode() {
isWord=false;
memset(children, NULL, sizeof(children)); //results in warning
};
};
这会导致警告:
warning: passing NULL to non-pointer argument 2 of 'void* memset(void*, int, size_t)' [-Wconversion-null]
将其替换为nullptr
会导致编译时错误:
error: cannot convert 'std::nullptr_t' to 'int' for argument '2' to 'void* memset(void*, int, size_t)'
所以我的问题是,如何将children
中的所有值初始化为NULL
/nullptr
?我尝试了一些选项,例如 children[26]={ nullptr };
,但这些都导致了运行时错误(仅在 memset(children, NULL, sizeof(children));
下工作正常)。
最终,在构建 trie 时,我希望有以下逻辑:
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 混淆,请参阅此内容:
What is the difference between NULL, '[=11=]' and 0?
我正在尝试解决一个 Trie 问题,为此我创建了一个 TrieNode
class,如下所示:
class TrieNode {
public:
bool isWord;
TrieNode* children[26];
TrieNode() {
isWord=false;
memset(children, NULL, sizeof(children)); //results in warning
};
};
这会导致警告:
warning: passing NULL to non-pointer argument 2 of 'void* memset(void*, int, size_t)' [-Wconversion-null]
将其替换为nullptr
会导致编译时错误:
error: cannot convert 'std::nullptr_t' to 'int' for argument '2' to 'void* memset(void*, int, size_t)'
所以我的问题是,如何将children
中的所有值初始化为NULL
/nullptr
?我尝试了一些选项,例如 children[26]={ nullptr };
,但这些都导致了运行时错误(仅在 memset(children, NULL, sizeof(children));
下工作正常)。
最终,在构建 trie 时,我希望有以下逻辑:
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 混淆,请参阅此内容: What is the difference between NULL, '[=11=]' and 0?