我正在研究非二叉树结构,因此我有一个如下定义的结构,它有一个数据,所有它的子都在一个名为child的向量中。
struct node{
string data;
vector< node* > child;
vector<node*>::iterator i
int Count;
};
我有另一个函数,我已经定义了在向量中打印子元素,但我无法使迭代器工作
void printTree(node* &a){
for(a->i = a->child.begin(); a->i !=a->child.end();++i)
cout << *(a->i)->data <<endl;
}
我收到一个错误,即调用printTree时未定义迭代器。我尝试在printTree函数中定义迭代器,但我一直收到错误。关于如何更改代码的任何建议?
答案 0 :(得分:3)
请从您的node
结构中取出迭代器。
void printTree(node* &a)
{
for( vector<node*>::iterator i = a->child.begin(); i != a->child.end(); i++ )
{
cout << (*i)->data << endl;
}
}
<强> [编辑] 强>
当我写这个答案时,我甚至感到困惑。我常常通过在循环中执行此操作来避免丑陋和可能令人困惑的迭代器解除引用:
node * n = *i;
cout << n->data << endl;
更一般地说,如果我有SomeContainer<SomeType>
,我会这样做:
for( SomeContainer<SomeType>::iterator i = foo.begin(); i != foo.end(); i++ )
{
SomeType & val = *i;
// ...
}
当您迭代map
并且必须使用i->second
来获取数据而不是*i
时,上述方法特别方便。