2014-05-22 100 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)