堆栈分配的容器如何知道何时分配它们的子级?
例如:
class Trie {
public:
struct Node {
map<char, Node> letters;
bool end;
};
Node root;
/** Initialize your data structure here. */
Trie() {
}
/** Inserts a word into the trie. */
void insert(string word) {
Node *iter = &root;
for(auto c: word) {
iter = &iter->letters[c];
}
iter->end = true;
}
/** Returns if the word is in the trie. */
bool search(string word) {
Node *iter = &root;
for(auto c: word) {
if(iter->letters.find(c) == iter->letters.end()) return false;
iter = &iter->letters[c];
}
return iter->end;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix) {
Node *iter = &root;
for(auto c: prefix) {
if(iter->letters.find(c) == iter->letters.end()) return false;
iter = &iter->letters[c];
}
return true;
}
};
这段代码可以工作,但我不完全确定原因。(这是我在LeetCode上对Trie问题的解决方案。)
我有一个简单的堆栈分配根Node
,其中包含char
-> Node
的映射。我的问题是,子节点是什么时候实际分配的?在引用letters
(iter = &iter->letters[c];
)下的节点时会发生这种情况吗?这段代码是不是非常不正确,并且对未定义的行为做了太多的假设?
https://stackoverflow.com/questions/50789332
复制相似问题