从向量中删除对象

时间:2014-05-22 17:54:40

标签: c++ object vector

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

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)
            }
        }
    }
}

如何从矢量中删除对象?

4 个答案:

答案 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_ifstd::vector::eraseerase-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)