返回共享指针,二叉树 C++11,
Returning shared pointer, binary tree C++11,
我必须使用智能指针为 class 创建小型二叉树。当 ChildL 和 ChildR 是 public 成员并且我直接使用它们时,一切都很好,但我应该创建具有私有成员的树并通过函数访问。
控制台中的结果只是:root
你能帮助我吗 ?我正在使用 visual studio 2015.
#include <iostream>
#include <memory>
#include <string>
using namespace std;
class Node
{
public:
Node(string n) : name(n) {}
shared_ptr<Node> getChildL()
{
return ChildL;
}
shared_ptr<Node> getChildR()
{
return ChildR;
}
shared_ptr<Node> createChildL(string n)
{
return shared_ptr<Node>(new Node(n));
}
shared_ptr<Node> createChildR(string n)
{
return make_shared<Node>(n);
}
string getName()
{
return name;
}
private:
string name;
shared_ptr<Node> ChildL, ChildR;
};
void PrintTree(shared_ptr<Node> tree)
{
if (tree)
{
cout << tree->getName() << endl;
PrintTree(tree->getChildL());
PrintTree(tree->getChildR());
}
}
int main()
{
shared_ptr<Node> root = make_shared<Node>("root");
root->getChildL() = root->createChildL("leaf");
PrintTree(root);
cin.get();
}
这位会员:
shared_ptr<Node> createChildL(string n) {
return shared_ptr<Node>(new Node(n));
}
不分配给 ChildL
。它只是创建一个新节点并将其嵌入到共享指针中,然后 returns 它。
您可能(我想)实施:
std::shared_ptr<Node> createChildL(std::string n) {
ChildL=std::make_shared<Node>(n);
return ChildL;
}
但这不是最好的方法。如果您要做的只是封装,请考虑实施 get/set 对:
void setChildL(const std::shared_ptr<Node>& left) {
ChildL=left;
}
您可能想要构建一个 BinaryTree
class 以遵循树不变性的方式处理节点的插入/删除(例如 ChildL->n <= n 和 ChildR->n >n 代表每个节点。).
我必须使用智能指针为 class 创建小型二叉树。当 ChildL 和 ChildR 是 public 成员并且我直接使用它们时,一切都很好,但我应该创建具有私有成员的树并通过函数访问。 控制台中的结果只是:root 你能帮助我吗 ?我正在使用 visual studio 2015.
#include <iostream>
#include <memory>
#include <string>
using namespace std;
class Node
{
public:
Node(string n) : name(n) {}
shared_ptr<Node> getChildL()
{
return ChildL;
}
shared_ptr<Node> getChildR()
{
return ChildR;
}
shared_ptr<Node> createChildL(string n)
{
return shared_ptr<Node>(new Node(n));
}
shared_ptr<Node> createChildR(string n)
{
return make_shared<Node>(n);
}
string getName()
{
return name;
}
private:
string name;
shared_ptr<Node> ChildL, ChildR;
};
void PrintTree(shared_ptr<Node> tree)
{
if (tree)
{
cout << tree->getName() << endl;
PrintTree(tree->getChildL());
PrintTree(tree->getChildR());
}
}
int main()
{
shared_ptr<Node> root = make_shared<Node>("root");
root->getChildL() = root->createChildL("leaf");
PrintTree(root);
cin.get();
}
这位会员:
shared_ptr<Node> createChildL(string n) {
return shared_ptr<Node>(new Node(n));
}
不分配给 ChildL
。它只是创建一个新节点并将其嵌入到共享指针中,然后 returns 它。
您可能(我想)实施:
std::shared_ptr<Node> createChildL(std::string n) {
ChildL=std::make_shared<Node>(n);
return ChildL;
}
但这不是最好的方法。如果您要做的只是封装,请考虑实施 get/set 对:
void setChildL(const std::shared_ptr<Node>& left) {
ChildL=left;
}
您可能想要构建一个 BinaryTree
class 以遵循树不变性的方式处理节点的插入/删除(例如 ChildL->n <= n 和 ChildR->n >n 代表每个节点。).