簡體   English   中英

c ++遍歷對象列表並刪除對象

[英]c++ Iterating over a list of objects and deleting a object

我有一個對象列表,一旦遇到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;
    }
}

我認為您的想法正確,但是您做錯了事。 文件夾是:

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

我確定這個問題已經在某個地方回答了,但是代碼很簡單:

您只需要使用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 ,但功能的一些列表現有的外線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM