Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 结构C+的深度复制+;_C++_Struct - Fatal编程技术网

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,我不再计算我们今天通过“读书”回答了多少问题。这是家庭作业吗?我将删除我的答案,直到我知道答案是否正确。我真的很恼火,作业标签已经被打消了。不是真正的作业,只是用它作为一个例子,从我的笔记中学习考试。