此代碼的工作:我如何錯誤地使用矢量迭代器?
for (unsigned int i = 0; i != m_cResources.getLoadedPlayers().size(); i++) {
m_cResources.getLoadedPlayers()[i]->update();
}
當我嘗試使用迭代器與下面的代碼,我的程序掛起並停止工作:
for (std::vector<CPlayer*>::iterator i = m_cResources.getLoadedPlayers().begin();
i != m_cResources.getLoadedPlayers().end(); i++) {
(*i)->update();
}
getLoadedPlayers()返回CPlayer的矢量*。更新是CPlayer中的成員函數。
我從來沒有使用迭代器之前,所以我真的不知道什麼是錯的。我不認爲這個錯誤不在這個代碼之外,因爲第一個塊可以工作。所以我假設我的迭代器的實現是錯誤的。有任何想法嗎?
編輯:getLoadedPlayers()返回由值的矢量,而不是參考。這很可能是問題嗎?但那麼第一個代碼塊也不行?我會盡快對此進行測試。
更新函數基於先前設置的標誌在CPlayer修改成員值。
「CPlayer :: update」中是否修改了由'getLoadedPlayers()'返回的向量(並因此可能使迭代器失效)? –
和樣式註釋:更喜歡用'++ i'作爲迭代器到'i ++'。 –
'getLoadedPlayers'是否通過引用或按值返回向量? –