Löschen in Liste



  • Ich muss aus einer Liste mit Songs einen bestimmten löschen,
    der Titel wird als String übergeben.
    Das vergleichen des Strings mit dem Titel des Songs funktioniert, nur wie lösche ich den entsprechenden dann???

    void playlist::loeschen(string titel)
    {
    	list<song>::iterator i;
    	i = liste.begin();
    
    	for(i;i!=liste.end();i++)
    	{
    		if(i->getTitle() == titel)
    		{
    			liste.remove(???);
    		}
    	}
    
    }
    


  • void playlist::loeschen(string titel)
    {
        list<song>::iterator i;
        song tempsong;
        i = liste.begin();
    
        for(i;i!=liste.end();i++)
        {
            if(i->getTitle() == titel)
            {
                tempsong = *i;
            }
        }
    
        if(tempsong != NULL)
           liste.remove(tempsong);
    
    }
    

    würde ich mal sagen.

    Edit: ah sorry:
    du muss den zu löschenden Song übergeben.
    http://www.cplusplus.com/reference/stl/list/remove/



  • void playlist::loeschen(const string &titel)
    {
        for(list<song>::iterator i(liste.begin()), e(liste.end()); i != e; ++i) 
        {
            if(i->getTitle() != titel)
                continue;
    
            liste.erase(i);
            break;
        } 
    }
    

    alternativ:

    void playlist::loeschen(const string &titel)
    {
        for(list<song>::iterator i(liste.begin()), e(liste.end()); i != e; ++i) 
        {
            if(i->getTitle() == titel)
            {
               liste.erase(i);
               break;
            }
        } 
    }
    

    wenn du alle vorkommen löschen willst:

    void playlist::loeschen(const string &titel)
    {
        for(list<song>::iterator i(liste.begin()), e(liste.end()); i != e; ) 
        {
            if(i->getTitle() == titel)
                i = liste.erase(i);
            else
                ++i;
        } 
    }
    

    das kann man natürlich wieder vertauschen - is (auch wieder) geschmackssache ^^

    bb

    edit: remove geht nur, wenn dein song den op == überladen hat - und der nur den titel vergleicht... glaub ich aber nicht, dass das sinnvoll wäre...

    aber vll wäre remove_if das, was du suchst...

    hf ^^



  • Danke für die Antworten!
    Musste das ganze noch erweitern und hab's mittlerweile zu einer multimap umgebaut


Log in to reply