2015-11-24 43 views
-1

我很難編碼這個(或者甚至搞清楚如何編碼這個)。我有一個節點列表。每個節點都包含多個值,但我唯一關心的是一個字符串。使用節點值在列表中搜索節點

當我添加節點到我的列表中時,我需要驗證我創建的節點不存在。如果確實存在,我需要訪問它並修改其中的某些內容。這裏是我的代碼到目前爲止:

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    list<Noeud*> * liste = new list<Noeud*>; 
    const string fichierDonnees = "Test01.txt"; 


    ifstream fichier; 
    fichier.open(fichierDonnees); 
    if (!fichier.is_open()) { 
     cerr << ConvertirAccents("ERROR OPENING FILE ") << fichierDonnees << endl; 

     return -1; 
    }else{ 

    std::ifstream file(fichierDonnees); 
    std::string str; 
    int counter=0; 
    while (std::getline(file, str)) 
    { 

     Noeud * temp = new Noeud(str); 

    //verify if liste has the node temp; 

    } 
} 

fichier.close(); 


    _getch(); 
    return 0; 
} 

謝謝!

+1

您需要遍歷列表並檢查每個節點。如果您找到該節點,然後編輯它的內容。如果您沒有找到它,請使用正確的內容在列表中創建一個新節點。 –

+0

我不認爲我是在要求某人給我寫一份清單,我已經寫了清單並實施了它的功能。我只是不知道如何使用迭代器並通過它。我認爲超載==,但這並沒有工作,或者 – user3232709

+0

我已經想出瞭如何使用這個迭代器: [code] for(std :: list :: iterator itera = liste.begin(); it!= liste.end(); ++ it) std :: cout <<''<< * it; [/ code] 我只是不明白爲什麼itera不是Noeud *,我不能使用 - >或者訪問它裏面的任何東西。 – user3232709

回答

0

方法beginend不返回列表中的數據,它們將迭代器返回給列表。在迭代器上使用*->運算符可讓您訪問裏面的數據。如果你有一個std::list<Noeud*>,迭代器包含Noeud*

auto itera = liste.begin(); //itera is std::list<Noeud*>::iterator 
*itera; //evaluates to Noeud* 
itera->...; //Won't work, pointers don't have members. 
(*itera)->...; //Gets pointer from iterator, gets member from pointed to object. 

雖然你可能不需要指針列表。只是做一個std::list<Noeud>通常工作。它節省了先解析迭代器的麻煩。