我正在开发一个包含树数据结构的项目,树中的每个节点都存储指向 vector 中子节点的指针。在我的一个函数中,我试图使用迭代器遍历 vector ,但为了让它工作,我必须将取消引用的迭代器分配给一个临时变量:
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())
然后我收到错误消息“表达式必须具有指向类的指针type。不是这样吗?取消引用我的迭代器不应该返回指向我的 Node 类的指针吗?
最佳答案
根据 Operator Precedence , operator->
的优先级高于 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/