std::equal + list<char> + string == Fehler?



  • Wie man im Topic bereits sieht, wollte ich ne list<char> mit nem string vergleichen und das ganze mit Hilfe der Funktion equal aus <algorithm>.
    Wenn ich nun folgendes schreibe if (std::equal(foo.begin(), foo.end(), bar.begin(), bar.end()) erhalte ich nen Compilerfehler in einer Datei namens xutility, da dort irgendein Ausdruck keine Funktion mit 2Argumenten ergibt.

    Kann man eine list<char> und ein string überhaupt mit der Funktion std::equal vergleichen?



  • equal schaut nach ob alle Elemente einer Menge gleich sind, nicht ob jeweils die selbe Position in zwei verschiedenen Mengen gleich ist.

    MfG SideWinder



  • Du suchst offenbar sowas:

    bool compare (FwdIt beg1, FwdIt end1, FwdIt beg2, FwdIt end2)
    {
        while(beg1 != end1 && beg2 != end2) // EDIT: Peinlich, hier stand < statt !=
        {
            if(*beg1 != *beg2) return false; // Unterschiedliche Elemente -> false
            ++beg1; ++beg2;
        }
    
        if(beg1 == end1 && beg2 == end2)
            return true; // Gleich lang und gleiche Elemente -> true
        else
            return false; // Unterschiedliche Längen -> false
    }
    

    Ungetestet.

    MfG SideWinder



  • @SideWinder ok dann scheidet equal auf jeden Fall aus.

    Ne eigene Version hab ich inzwischen schon, aber wollte trotzdem wissen weshalb es nicht geht.

    Meine sieht so aus

    bool equal (const list<char> & lhs, const string & rhs)
    {
    	if (lhs.size () != rhs.size ())
    		return false;
    	list<char>::const_iterator it1 = lhs.begin();
    	string::const_iterator it2 = rhs.begin();
    
    	for (; it1 != lhs.end (); ++it1, ++it2)
    		if (*it1 != *it2)
    			return false;
    
    	return true;
    
    }
    


  • Bei mir funktionierts...

    MfG SideWinder



  • Wollte nur mal fragen, wofür du ne char-Liste benutzt. Mir fällt momentan echt kein Anwendungsfall ein. Oder dient das nur der Übung?



  • Ich muss die letzten X Zeichen auf nen Schlüsselwort prüfen und ne liste ist am einfachsten, immer das erste Zeichen entfernen, dann das neue hinten anfügen und dann prüfen ob es sich um das Schlüsselwort handelt.


Anmelden zum Antworten