Re: Doubts on type requirement for list/vector.
{ extra whitespace removed. please check the settings of your newsgroup
posting software. -mod }
Amit Bhatia<amit.bhatia.nospam@nospam.gmail.com> writes:
I am trying to implement a tree as follows (I am using namespace std):
node.h->>
class Node
{
// some stuff ctors, dtors, etc, BUT NO Default ctor;
Node &parent_node; // I want to avoid copying. ??
vector< list<Node>::iterator > child_nodes; // ??
At this point, Node is an incomplete type. But the code attempts to
instantiate a Standard Library template for it; this has undefined
behavior.
};
tree.h ->>
class Tree
{
//again ctors, dtors, and some other stuff;
list< Node> treeofnodes;
};
So are the above declarations correct? I don't have a default ctor
for the Node class so am not sure if above would work.
Being default-constructible is not a requirement for Standard Library
container element types.
I want to avoid copying the same instance again and again, hence I
am using "Node &parent_node;" This would come from the list
"treeofnodes". If above does work, then I am also thinking if this
can be done:
can I do something like this:
list<Node &> treeofnodes; //??
No. Being copyable *is* a requirement for Standard Library container
element types. Reference types don't meet it.
The advantage that I see in this is that I won't have to waste time
copying an instance of class Node when I insert it into the list..
If none of this is supposed to work, then I guess I have no other option
but to resort to pointers and use
class Node
{
// some stuff ctors, dtors, etc, BUT NO Default ctor;
Node *parent_node; //
vector< Node * > child_nodes; //
};
class Tree
{
//again ctors, dtors, and some other stuff;
list< Node*> treeofnodes;
};
This can be made to work.
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]