【问题标题】:Remove Object from List C++从 C++ 列表中删除对象
【发布时间】:2019-12-29 16:47:46
【问题描述】:

有很多这样的问题,但我尝试了其中的大部分,但我无法成功。作为我最后一次尝试,我没有任何错误,但该功能不起作用

这是我上次所做的,我需要从列表中删除特定对象

void discharge_patients() {
    string str;
    cout << "Enter Patients Name : " << endl;
    cin >> str;

    for (hospital const& common : hospitalList) {
        if(common.getPatientName() == str){
            cout << "\nPatient Name : " << common.getPatientName() << "\t";
              hospitalList.remove(common);
              break;
        }
    }
    iputData();
}

医院清单声明

list<hospital> hospitalList;

这就是我向hospitalList添加对象的方式

void admit_patient() {
    hospital obj;
    string str;
    int val;
    cout << "Enter Patients Name : " << endl;
    cin >> str;
    obj.setPatientName(str);
    cout << "Enter Bed Number : " << endl;
    cin >> val;
    obj.setBedNum(val);
    cout << "Enter Date of Admit 'dd/mm/yyyy' : " << endl;
    cin >> str;
    obj.setDateOfAdmit(str);
    cout << "Enter Patient Age :" << endl;
    cin >> val;
    obj.setAge(val);
    cout << "Enter Patient Ward No :" << endl;
    cin >> val;
    obj.setWardNumber(val);
    //push the object to hospitalList
    hospitalList.push_back(obj);
    iputData();
}

这就是我的hospital 班级的样子

class hospital {

公开: 字符串 Patient_Name,Date_of_Admit; int Bed_Num, Age, Ward_Number;

int getAge() const {
    return Age;
}

void setAge(int age) {
    Age = age;
}

int getBedNum() const {
    return Bed_Num;
}

void setBedNum(int bedNum) {
    Bed_Num = bedNum;
}

const string& getPatientName() const {
    return Patient_Name;
}

void setPatientName(const string& patientName) {
    Patient_Name = patientName;
}

int getWardNumber() const {
    return Ward_Number;
}

void setWardNumber(int wardNumber) {
    Ward_Number = wardNumber;
}

const string& getDateOfAdmit() const {
    return Date_of_Admit;
}

void setDateOfAdmit(const string& dateOfAdmit) {
    Date_of_Admit = dateOfAdmit;
}
};

【问题讨论】:

    标签: c++ list


    【解决方案1】:

    如果您在迭代期间更改列表,则您的迭代器将失效。

    https://stackoverflow.com/a/10360466/5107799https://stackoverflow.com/a/1016332/5107799

    【讨论】:

    • 要补充这一点,而不是使用 for 循环,请考虑从 &lt;algorithm&gt; 调用 std::find()。这样可以避免在迭代时进行操作。
    • 或者只是来自第二个链接的remove_if
    • 是的,但 OP 的目标仍然是删除。所以通过从std::find()获取迭代器,只要不是hospitalList.end(),他们就可以调用remove()。此外,如果迭代器在列表的末尾,那么 OP 可以断定记录不在hospitalList 中。
    • 对于第二个链接我如何合并我的条件if(common.getPatientName() == str){
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    相关资源
    最近更新 更多