c ++ Перебор списка объектов и удаление объекта - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть список объектов, и я хочу удалить определенный объект, как только он выполнит условие if. Но у меня есть проблемы с этим работает. Главным образом потому, что условие if вызывает ошибку.

Также я не знаю, нужно ли мне создавать временную папку и пусть это будет моим условием if? Я, честно говоря, немного запутался в итераторах, и любая дополнительная информация может быть полезна.

void removeFolder(string fName)
{
    list<Folder> folders = this->getFolders();
    for (list<Folder> itr = folders.begin(); itr != folders.end();)
    {
        if (fName == *itr)
            itr = folders.erase(itr);
        else
            ++itr;
    }
}

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я думаю, у вас правильная идея, но вы делаете не то, что нужно.Папки:

list<Folder> folders

Чем вы итерируете разные элементы "папка", а не "Папка":

for (list<folder> itr = folders.begin(); itr != folders.end();)

Я думаю, что это должно быть скорее:

for (list<Folder>::iterator itr = folders.begin(); itr != folders.end();)

Теперь, когда вы выполняете итерацию правильных объектов, сделайте сравнения, которые имеют смысл, а не строку с объектом:

if (fName == *itr)

, а скорее сравните строку со строкой, я предполагаю, что у вашего класса Folder есть некоторый метод для получения имени папки, например:

if (fName == (*itr).getFolderName())
0 голосов
/ 07 сентября 2018

Я уверен, что где-то уже есть ответ на этот вопрос, но код прост:

Вам нужно использовать только std::list<Folder>::remove_if().

void removeFolder(const std::string& fName)
{
    std::list<Folder>& folders = getFolders();
    folders.remove_if([&fName](Folder& item){return item.name == fName;});
}

Как уже отмечали другие, с вашим кодом есть другие проблемы, которые я пытался исправить. В частности, вы, вероятно, сравниваете какой-то член name с переменной fName. Также нет необходимости передавать строку fName по значению в функцию removeFolder, и, вероятно, вам нужно изменить не локальную копию folders, а какой-либо список, существующий вне функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...