如何擦除指针向量的某些元素

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 中的擦除功能。