使用VS 2012在构造函数中初始化树节点中的数组

Posted

技术标签:

【中文标题】使用VS 2012在构造函数中初始化树节点中的数组【英文标题】:Initializing array in a node of a tree in constructor using VS 2012 【发布时间】:2015-10-15 12:15:20 【问题描述】:

我正在用 C++ 构建一个通用树。我简化了我的代码只是为了了解我在做什么。本质上,我想在我的每个树节点中存储一个 char 数组。我知道数组的大小以及数组的大小和内容对于每个节点都是相同的。我的印象是 VS 2012 符合 C++11。当尝试初始化我的数组时,这种方法不起作用。

class Tree
public:
    Tree();

private:

struct Node
    Node* lchild;
    Node* mchild;
    Node* rchild;
    Node* parent;
    std::array<char, 5> arr  'a', 'b', 'c', 'd', 'e';
;

Node* root;

;

这个也没有

class Tree
public:
    Tree();

private:

struct Node
    Node* lchild;
    Node* mchild;
    Node* rchild;
    Node* parent;
    std::array<char, 5> arr;
;

Node* root;

;

Tree::Tree()
    root = new Node;
    root->parent = nullptr;
    root->lchild = nullptr;
    root->mchild = nullptr;
    root->rchild = nullptr;
    root->arr = 'a', 'b', 'c', 'd', 'e';


假设我希望我的数组长度为 30 个元素。有没有更好的方法来使用 VS 2012 初始化它而不是在我的构造函数中手动执行它,即

root->arr[0] = 'a', root->arr[1] = 'b', root->arr[2] = 'c', root->arr[3] = 'd'.......

如果没有什么潜在的解决方法,或者我是否对每个节点都坚持做 30 次?

【问题讨论】:

【参考方案1】:

如果您已经知道值,请在 Node 构造函数中初始化 arr,例如

Node::Node():
  arr(/*values...*/)
        //rest of c.tor body.

最好对其余的Node 成员进行空初始化。

【讨论】:

我认为我应该将Node 设为类而不是结构是否正确?只是为了让事情变得更容易。 出于好奇,你是C背景的吗? @user5447431 唯一的区别是默认访问保护。我会保留它一个结构,但添加一个构造函数。 没有。我从来不需要将数组放入节点结构中。不幸的是,这是一个作业,我需要使用 VS 2012。 所以 struct 和 class 之间的唯一区别是,在 struct 中,everthing 默认情况下是公共的,而在 class 中,所有内容默认情况下都是私有的。 Node 最好包含构造函数、析构函数、复制构造函数和移动构造函数恕我直言。

以上是关于使用VS 2012在构造函数中初始化树节点中的数组的主要内容,如果未能解决你的问题,请参考以下文章

在构造函数的初始化列表中初始化数组

函数调用或构造函数调用中的 C++ 数组初始化

拷贝构造函数 Vs 赋值运算函数

在类构造函数内初始化 Dev C 中的字符串数组

在构造函数初始化列表中初始化成员数组(C++11之前)

Huffman树与编码