我正在一个包含树数据结构的项目中,树中的每个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 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/