【问题标题】:Initialize values of a struct pointer初始化结构指针的值
【发布时间】:2018-07-01 04:57:03
【问题描述】:

我开始学习cpp中的二叉树和动态分配的内存; 因此要初始化一个结构我这样做

struct node{
    int val;
    node* left;
    node* right;
};
//Initialize:
node* root = new node;
root->val = 7;
root->left = NULL;
root->right = NULL;

我想知道是否有更好的方法来设置结构值而无需编写最后三行代码。 我在一些网页上看到他们这样做:

int* n = new int(6);

谢谢!

【问题讨论】:

标签: c++ struct initializer


【解决方案1】:

您可以编写自定义构造函数:

struct node{
    int val;
    node* left;
    node* right;
    node(int);
};

node::node(int _v){
    this->val = _v;
    this->left = this->right = nullptr;
}

node *root = new node(6); // Works as you want

或者使用成员初始化器列表,看起来更简单:

struct node{
    int val;
    node* left;
    node* right;
    node(int _v) : val(_v), left(nullptr), right(nullptr) {};
};

不要忘记列表后面的大括号。

【讨论】:

  • 我一辈子都在学习错误的 C++ 吗?这是我第一次听说自定义构造函数或结构的成员初始化列表。
【解决方案2】:

除了 iBug 关于使用构造函数的回答之外,如果您的对象是普通旧数据类型,您可以使用聚合初始化来使用初始化器列表来构造它,方式如下,避免需要在以下位置定义自己的构造函数全部:

node root = {7, nullptr, nullptr};

或者,如果您正在堆上进行分配:

node* root = new node{7, nullptr, nullptr};

您可以在aggregate initialization 上查看此页面以获取更多信息。

【讨论】:

  • 是的,这也有效,我会记住的,坦克你,但如果我目前正在工作,我更喜欢构造函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多