【问题标题】:How to initialize an array inside of a tree node in my constructor?如何在构造函数中初始化树节点内的数组?
【发布时间】:2015-10-15 02:38:43
【问题描述】:

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

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

class Tree{
public:
    Tree();

private:

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

Node* 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。

【问题讨论】:

  • 让一个类被其他人初始化是不好的风格。相反,Node 应该有一个构造函数(或其参数的默认值),以便 root = new Node;root = new Node(args...); 完成您需要的所有初始化。
  • 什么反对Tree::Tree() : arr("abcd") { ...}
  • 还有:如果你使用 "arr" 作为字符串,你会忘记终止符号 - char[5] 只能保存字符串 "abcd" - 因为第 5 个字符是 \0终结者。

标签: c++ arrays constructor tree


【解决方案1】:

一种方式:

memcpy( arr, "abcde", 5 );

【讨论】:

  • 注意:5 是正确的。该数组被声明为arr[5]。并非所有 char 数组都是 C(以空字符结尾)字符串。
【解决方案2】:

看来你用的是c++11,就这么写吧:

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

【讨论】:

    【解决方案3】:

    由于您使用的是 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'};
    
    }
    

    【讨论】:

    • 当我这样尝试时,我得到了编译器错误。全部来自root-&gt;arr = { 'a', 'b', 'c', 'd', 'e' }; 语法错误:'{' 语法错误:缺少';' '{' 之前的语法错误:缺少 ';'在'}'之前
    • 哪个编译器?我用的是 g++ 5.2.0。
    • @user5447431你是对的:msdn.microsoft.com/en-us/library/hh567368.aspx 你需要 VS2013 才能使用初始化列表。
    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多