gpt4 book ai didi

c++ - 有人可以将这 3 个构造函数缩减为一个吗?

转载 作者:太空狗 更新时间:2023-10-29 20:49:34 24 4
gpt4 key购买 nike

我试图编写一个简短的类来创建一个二叉树,但我对这 3 个独立的构造函数不满意,但我不知道如何将代码打包成一个。有人可以帮忙吗?

#include <string>
#include <memory>

class node{
private:
std::string label;
std::shared_ptr<node> left;
std::shared_ptr<node> right;
public:
node(const std::string& name) : label(name), left(nullptr), right(nullptr) {}
node(const std::string& name, const node& leftChild) :
label(name),
left(std::make_shared<node>(leftChild)),
right(nullptr) {}
node(const std::string& name, const node& leftChild, const node& rightChild) :
label(name),
left(std::make_shared<node>(leftChild)),
right(std::make_shared<node>(rightChild)) {}
};

int main()
{
// "root"
// / \
// "left" "right"
// /
// "left.left"
auto root = std::make_shared<node>("root", node("left", node("left.left")), node("right"));
return 0;
}

最佳答案

您可以使用 std::optional:

#include <string>
#include <memory>

class node{
private:
std::string label;
std::shared_ptr<node> left;
std::shared_ptr<node> right;
public:
node(const std::string& name,
const std::optional<node>& leftChild = {},
const std::optional<node>& rightChild = {}) :
label(name),
left(leftChild ? std::make_shared<node>(*leftChild) : nullptr),
right(rightChild ? std::make_shared<node>(*rightChild) : nullptr) {}
};

int main()
{
// "root"
// / \
// "left" "right"
// /
// "left.left"
auto root = std::make_shared<node>("root", node("left", node("left.left")), node("right"));
}

关于c++ - 有人可以将这 3 个构造函数缩减为一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57913940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com