2014-05-22 73 views
1

我已经将对象存储在一个矢量中,其中每个对象都有一个员工编号属性。如果用户想要从矢量中删除一个对象,用户可以输入员工编号,以便特定对象从矢量中删除。从矢量中删除对象

void Administrator::deleteMember() 
{ 
    string staffNumber; 
    FileHandler<Administrator> adminTObj; 
    cout<<"Enter Staff Number of the Member to Delete"<<endl; 
    cin>>staffNumber; 

    if(staffNumber.find("Ad")) 
    { 
     vector<Administrator> myVec=adminTObj.getVectorAdministrator(); 
     for(Administrator iter:myVec) 
     { 
      if(iter.getStaffNumber()==staffNumber) //checks if the staff number matches an object's staff number 
      { 
       // If it matches it should delete the record (Need to implement) 
      } 
     } 
    } 
} 

如何从矢量中删除对象?

+0

请参阅http://en.cppreference.com/w/cpp/container/vector,了解您可以在矢量上执行的所有操作。请参阅http://en.cppreference.com/w/cpp/algorithm,了解您可以对可以用迭代器序列描述的任何事情做的事情。 –

回答

6

如果您有一个元素,则可以使用std::find_if获取元素的迭代器,并使用std::vector::erase将其删除。

auto it = std::find_if(myVec.begin(), 
         myVec.end(), 
         [staffNumber](const Administrator& a) 
         { return a.getStaffNumber() == staffNumber; }); 

myVec.erase(it); 

如果你想删除满足标准的所有元素,使用std::remove_ifstd::vector::erase(该erase-remove idiom)。

auto it = std::remove_if(myVec.begin(), 
         myVec.end(), 
         [staffNumber](const Administrator& a) 
         { return a.getStaffNumber() == staffNumber; }); 

myVec.erase(it, myVec.end()); 
+0

@ZanLynx谢谢!固定。 – juanchopanza

0

你可以使用erase方法,它是记录here;不过,你应该在之后立即打破循环,因为erase的调用可能会使迭代器失效。

+1

擦除有用地返回一个有效的迭代器,虽然我忘记它是否是前一个或下一个元素。 –

+0

@ZanLynx这是下一个元素,如http://www.cplusplus.com/reference/vector/vector/erase/ – Codor

0

这是如何通过其索引ID从向量中删除特定项目。

int at; 
vector<Administrator> myVec=adminTObj.getVectorAdministrator(); 
at = indexToErase; 
myVec.erase(myVec.begin()+at)