我正在一个包含树数据结构的项目中,树中的每个Node在向量中存储指向子Node的指针。在我的函数之一中,我试图使用迭代器遍历向量,但要使其正常工作,我必须将取消引用的迭代器分配给一个临时变量,如下所示:

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()),则会收到错误消息“表达式必须具有指向类的指针。不是这种情况吗?不应该取消引用迭代器,否则返回指向我的指针的指针。节点类?

最佳答案

根据Operator Precedenceoperator->的优先级高于operator*,然后*p->m_board.isComplete()等效于*(p->m_board.isComplete()),编译器抱怨p->m_board.isComplete()格式错误。

你可以

if ((*p)->m_board.isComplete())

关于c++ - 为什么需要将此取消引用的迭代器分配给一个临时值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38734174/

10-09 09:25