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

How to initialize an array inside of a tree node in my constructor?

本文关键字:树节点 数组 初始化 构造函数      更新时间:2023-10-16

我正在用c++构建一个通用树。我简化了我的代码,只是为了让大家明白我在做什么。本质上,我想在每个树节点中存储一个字符数组。我知道数组的大小,数组的大小和内容对于每个节点都是一样的。

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

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

说我想初始化我的字符数组包含'a','b','c','d','e'有一个更好的方法比手动做它?我使用VS 2012。据我所知,它并不完全支持c++ 11。

单向:

memcpy( arr, "abcde", 5 );

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

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

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