我已将对象存储在向量中,其中每个对象都有一个人员编号属性。如果用户想要从向量中删除对象,则用户可以输入人员编号,以便从向量中删除特定对象。
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 :(得分: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_if
和std::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());
答案 1 :(得分:0)
使用成员函数vector::erase()
,请参阅http://www.cplusplus.com/reference/vector/vector/erase/
答案 2 :(得分:0)
您可以使用erase
方法,该方法记录在案here;但是你应该在之后打破循环,因为调用erase
可能会使迭代器无效。
答案 3 :(得分:0)
这是如何通过索引id从矢量中删除特定项目。
int at;
vector<Administrator> myVec=adminTObj.getVectorAdministrator();
at = indexToErase;
myVec.erase(myVec.begin()+at)