如何擦除指针向量的某些元素
How to erase certain element of a vector of pointers
你好,我目前正在编写一个函数,该函数从指针向量(指向 class 对象)中删除元素,但我无法让它正常工作。
我收到这个错误
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
}
}
当您想从容器中删除元素时,不要使用自动范围循环。
我会使用 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 查找要删除的元素所在的索引并使用 vector 中的擦除功能。
你好,我目前正在编写一个函数,该函数从指针向量(指向 class 对象)中删除元素,但我无法让它正常工作。
我收到这个错误
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
}
}
当您想从容器中删除元素时,不要使用自动范围循环。 我会使用 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 查找要删除的元素所在的索引并使用 vector 中的擦除功能。