你好,我目前正在撰寫一個從指標向量(指向類物件)中擦除元素的函式,但我不能讓它作業。
我收到這個錯誤
error: no matching function for call to ‘std::vector<biblio::Reference*>::erase(biblio::Reference*&)’
std::vector<Reference*> m_vReferences; //Reference is a class
for ( auto iter : m_vReferences) //Loop for on every pointer to a class object
{
if (iter->reqId () == p_id) //Check if the id of the class object is the id we want
{
m_vReferences.erase (iter); //Erase the pointer in the vector of pointer
}
else
{
throw EmptyReferenceException (iter->reqFormatedReference ()); //An exception
}
}
uj5u.com熱心網友回復:
當您想從容器中洗掉元素時,不要使用自動范圍回圈。我會使用 std::remove_if ,因為它在標準庫中可用。
m_vReferences.erase(std::remove_if(m_vReferences.begin(),m_vReferences.end(),[p_id](Reference* x){
return x->reqId() == p_id;
}),m_vReferences.end());
或者您可以回圈遍歷 vector find 在哪個索引是您要洗掉的元素并使用 vector 中的擦除功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384346.html
下一篇:cpow與列舉
