我正在處理一個包含樹數據結構的項目,樹中的每個節點都存儲指向向量中的子節點的指針。在我的功能之一,我通過矢量使用迭代器試圖循環,但要得到它的工作,我要提領迭代器這樣分配給一個臨時變量:爲什麼我需要將這個解除引用的迭代器賦值給一個臨時值?
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