使用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在构造函数中初始化树节点中的数组的主要内容,如果未能解决你的问题,请参考以下文章