我正在处理一个包含树数据结构的项目,树中的每个节点都存储指向向量中的子节点的指针。在我的功能之一,我通过矢量使用迭代器试图循环,但要得到它的工作,我要提领迭代器这样分配给一个临时变量:为什么我需要将这个解除引用的迭代器赋值给一个临时值?
std::vector<Node*>::iterator p;
for (p = n->children.begin(); p < n->children.end(); p++)
{
Node* t = *p;
// if board is complete, mark as such and update score
if (t->m_board.isComplete())
{
// ...
}
}
如果我尝试写这个没有临时值的代码:if (*p->m_board.isComplete())
然后我得到错误信息“表达式必须有指向类的类型,这是不是这种情况?不应该取消引用我的迭代器返回指向我的Node类的指针吗?
不,它不能用“直”。你试过了吗? http://rextester.com/ZCZWLA76469 – songyuanyao
关键是迭代器在这里指向一个指针,所以你必须使用'operator *'来解引用它,然后使用'operator->'。您可以在这里映像迭代器像'Node **'一样工作。顺便说一句:我不是downvoter。 :) – songyuanyao
@songyuanyao,哦,我知道了,我的疏忽...... :-)。谢谢。 – WhiZTiM