我很困惑
第一个月vector<node> *children = new vector<node>;
vector<node*> children = new vector<node>;
我只想实现一个通用的树数据结构
struct node{
int index;
vector<int> sol;
vector<node *> children;
};
node *createNode(int indexVal)
{
node* n = new Node();
n->index = indexVal;
vector<int>* soll = new vector<int>;
n->sol = soll;
vector<node>* childrenn = new vector<node *>;
n->children = childrenn;
return n;
}
void addChildren(node* curr, node* child)
{
//something like
curr->push_back(child);
};
我希望能够在任何我想要的范围内修改sol和子向量,假设我有一个节点指针
我很困惑,这三个给出的哪一个会是最好的结果,它们会有什么不同?还有,这将如何扩展到2-d矢量?
3条答案
按热度按时间mpgws1up1#
你有这个:
这很好,它是一个指向
node
s的指针向量。你不用new
来创建它,只要你有一个node
,它就会自动创建。node
有sol
和children
向量直接在它里面。yizd12fk2#
关于
以及
They are the same. Both are declaring a pointer to a vector< int>. The only difference is the position of the *. Some people think it is more readable when the * is closer to the type name. Others prefer the * closer to the variable name.
虽然我更喜欢第一种方法,它使 * 更接近类型,但第二种方法更正确,因为在C++中,解析器将 * 与变量而不是类型相关联,因此可以声明如下内容:
This would declare variables ptr1, ptr2 and ptr3 as being pointers to vector< int> while var2 and var3 would be normal variables. If you use the first writing style and write:
如果你认为所有变量都是指针,那你就错了,只有ptr1是指针,其他变量都是普通变量。
现在这个
是完全不同的事情。在前两个中,你声明了一个指向int数组的指针,而在第三个中,你声明了一个指向int的指针数组。另外,注意你在new中的打字错误,你忘记了 *。为了工作,它需要是(注意结尾的 *)
关于您的代码,sol似乎是存储在节点中的数据,children包含指向其他节点的指针。
还有这里
我没有对树本身做任何评论,因为你发布的只是一个框架代码,而不是真正的代码。我假设你知道树,只是想知道关于指针和向量的C++的东西。如果你还不知道树,仔细看看你的代码,因为有一些部分是不太正确的。
nfs0ujit3#
vector<node>* children = new vector<node>;
和vector<node> *children = new vector<node>;
相同,并且是指向节点向量的指针,但是vector<node*> children = new vector<node>;
不正确,因为您的变量不是指针类型。要从堆分配内存,我们使用关键字new,并且变量应该是指针类型。vector<node*> children;
是指向节点的指针向量,但是这将从堆栈而不是从堆分配内存