0

我正在研究一个非二叉树结构,因此我有一个定义如下的结构,它有一个数据,它的所有孩子都在一个名为 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 函数中定义迭代器,但我不断收到错误消息。关于如何更改代码的任何建议?

4

1 回答 1

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;
    // ...
}

当您遍历 amap并且必须使用i->second来获取数据而不是*i.

于 2013-05-21T02:28:19.910 回答