我有一个对象列表,一旦遇到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;
}
}
答案 0 :(得分:2)
我认为您的想法正确,但是您做错了事。文件夹是:
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())
答案 1 :(得分:0)
我确定这个问题已经在某个地方回答了,但是代码很简单:
您只需要使用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
的本地副本,而是需要修改函数外部存在的一些列表