c++ - 为什么我需要将这个取消引用的迭代器分配给一个临时值?

标签 c++ vector iterator nodes dereference

我正在开发一个包含树数据结构的项目,树中的每个节点都存储指向 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/

相关文章:

C++使用函数对象对 vector 进行排序

c++ - 将 4D 数组存储在 Vector 中?

php 如果迭代器可被动态列的语句整除

java - 编写与 Python 接口(interface)的非常快速的抽象的语言选择?

c++: std::tr1::shared_ptr 从这个

c++ - 像这种情况,boost vf2 可以处理 multimap 吗?

c++ - 带私有(private)构造函数的 vector <class>

c++ - 在 C++ 中迭代 vector

c++ - 迭代继承类 C++ 的列表

c++ - 在非唯一集合上使用 erase-remove 习语