C++ 结构C+的深度复制+;
假设我有一个结构:C++ 结构C+的深度复制+;,c++,struct,C++,Struct,假设我有一个结构: struct TrieNode { const NumChars = 26; bool isWord; int letterCount; TrieNode *letters[NumChars]; TrieNode() { isWord = false; for ( int i = 0; i < NumChars; i += 1 ) { letters[i] = NULL; } // for letterCount = 0
struct TrieNode {
const NumChars = 26;
bool isWord;
int letterCount;
TrieNode *letters[NumChars];
TrieNode() {
isWord = false;
for ( int i = 0; i < NumChars; i += 1 ) {
letters[i] = NULL;
} // for
letterCount = 0;
}
};
现在如何创建根目录的不同副本?(C++中的深拷贝)可以定义自定义的“复制构造函数”。其形式如下:
TrieNode(const TrieNode& copyFrom){
//Do the copying here
}
然后,您可以按照自己的意愿使用此功能:
TrieNode example;
TrieNode deep(example);
TrieNode deep2 = example;
如果您想定义一个复制构造函数,那么很可能还需要定义析构函数和赋值运算符。这就是所谓的
如果实现赋值运算符(=
),则还可以编写如下代码:
TrieNode example;
TrieNode deep;
//Do stuff
deep = example; //Still a deep copy.
在C++中,您可以定义自定义的“复制构造函数”。其形式如下:
TrieNode(const TrieNode& copyFrom){
//Do the copying here
}
然后,您可以按照自己的意愿使用此功能:
TrieNode example;
TrieNode deep(example);
TrieNode deep2 = example;
如果您想定义一个复制构造函数,那么很可能还需要定义析构函数和赋值运算符。这就是所谓的
如果实现赋值运算符(=
),则还可以编写如下代码:
TrieNode example;
TrieNode deep;
//Do stuff
deep = example; //Still a deep copy.
您可以编写一个递归例程来进行复制。即,一个例程,它复制
isWord
和letterCount
,然后递归调用字母的每个非空元素。您可以将此例程设置为复制构造函数,也可以不设置。任何对代码其余部分最有意义的操作。您可以编写一个递归例程来进行复制。即,一个例程,它复制isWord
和letterCount
,然后递归调用字母的每个非空元素。您可以将此例程设置为复制构造函数,也可以不设置。任何对代码其余部分最有意义的内容。struct trinode{
struct TrieNode {
static const NumChars = 26;
bool isWord;
int letterCount;
TrieNode *letters[NumChars];
TrieNode() : isWord(false), letterCount(0) {
for ( int i = 0; i < NumChars; i += 1 ) {
letters[i] = NULL;
} // for
}
TrieNode(const TrieNode &other)
: isWord(other.isWord), letterCount(other.letterCount)
{
for ( int i = 0; i < NumChars; ++i ) {
if (other.letters[i]) {
letters[i] = new TrieNode(other.letters[i]);
} else {
letters[i] = NULL;
}
}
}
};
TrieNode *root = new TrieNode();
TrieNode *deepcopy = new TrieNode(*root);
静态常数NumChars=26;
布尔语;
整数字母计数;
三元组*字母[NumChars];
三节点():isWord(false),letterCount(0){
对于(int i=0;i
这是一个递归数据结构,因此需要一个递归复制算法。注意我的复制构造函数是如何调用自己来创建子节点的
嗯,这个东西有几个设计缺陷。但是你没有要求修复它们,你只是问如何制作它的深层拷贝。struct triode{
静态常数NumChars=26;
布尔语;
整数字母计数;
三元组*字母[NumChars];
三节点():isWord(false),letterCount(0){
对于(int i=0;i
这是一个递归数据结构,因此需要一个递归复制算法。注意我的复制构造函数是如何调用自己来创建子节点的
嗯,这个东西有几个设计缺陷。但是你没有要求修复它们,你只是问如何制作它的深层副本。TrieNode():isWord(),letters(),letterCount(){}
比你的简单。还有@MooingDuck Man,我不再计算我们今天通过“读书”回答了多少问题。这是家庭作业吗?我将删除我的答案,直到我知道答案是否正确。我真的很恼火,因为家庭作业标签已经被打消了。不是真正的家庭作业,只是用它作为我备考笔记中的一个例子。Trinode():isWord(),letters(),letterCount(){}
比你的简单。还有@MooingDuck Man,我不再计算我们今天通过“读书”回答了多少问题。这是家庭作业吗?我将删除我的答案,直到我知道答案是否正确。我真的很恼火,作业标签已经被打消了。不是真正的作业,只是用它作为一个例子,从我的笔记中学习考试。