如何在构造函数中初始化树节点内的数组?

时间:2015-10-15 02:38:43

标签: c++ arrays constructor tree

我正在用C ++构建一个通用树。我简化了我的代码只是为了了解我正在做的事情。本质上,我想在每个树节点中存储一个char数组。我知道数组的大小,每个节点的数组大小和内容都是一样的。

我的问题是如何在树构造函数中初始化数组?样本设置:

class Tree{
public:
    Tree();

private:

struct Node{
    Node* lchild;
    Node* mchild;
    Node* rchild;
    Node* parent;
    char arr[5];
};

Node* root;

};

所以在我的构造函数中,我将root初始化为一个新节点,并将所有指针初始化为nullptr。

Tree::Tree(){
    root = new Node;
    root->parent = nullptr;
    root->lchild = nullptr;
    root->mchild = nullptr;
    root->rchild = nullptr;
    root->arr[0] = 'a', root->arr[1] = 'b', root->arr[2] = 'c', root->arr[3] = 'd', root->arr[4] = 'e';
}

假设我想初始化我的char数组以包含'a','b','c','d','e'有没有比手动更好的方法?我正在使用VS 2012.据我所知,它并不完全支持C ++ 11。

3 个答案:

答案 0 :(得分:1)

一种方式:

memcpy( arr, "abcde", 5 );

答案 1 :(得分:0)

您似乎正在使用c ++ 11,所以只需写:

struct Node{
    Node* lchild;
    Node* mchild;
    Node* rchild;
    Node* parent;
    char arr[5] { 'a', 'b', 'c', 'd', 'e' };
};

答案 2 :(得分:0)

由于您使用的是C ++ 11,我建议您使用std::array<char, 5> arr代替char arr[5]。它可以这样使用:

#include <array>

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'};

}