I am trying to solve a Trie problem, for which I create a TrieNode
class as below:
class TrieNode {
public:
bool isWord;
TrieNode* children[26];
TrieNode() {
isWord=false;
memset(children, NULL, sizeof(children)); //results in warning
};
};
This results in a warning:
warning: passing NULL to non-pointer argument 2 of 'void* memset(void*, int, size_t)' [-Wconversion-null]
Replacing it with nullptr
results in a compile time error:
error: cannot convert 'std::nullptr_t' to 'int' for argument '2' to 'void* memset(void*, int, size_t)'
So my question is, how do I initialize all the values in children
to NULL
/nullptr
? I tried a few options such as children[26]={ nullptr };
, but those all resulted in runtime errors (worked fine only with memset(children, NULL, sizeof(children));
).
Eventually, while building the trie, I wish to have the following logic:
if(!curr->children[index]) {
curr->children[index]=new TrieNode();
}
curr=curr->children[index];
CodePudding user response:
You might do:
class TrieNode
{
public:
bool isWord = false;
TrieNode* children[26]{};
TrieNode() = default;
};
CodePudding user response:
The easiest C option is std::fill(std::begin(array), std::end(array), nullptr)
.