<list> -> Contains?!
-
Hi,
ich benutze die Bibliothek <list> in C++. Die Bibliothek enthält leider keine Routine für Contains oder ähnliches. Sehe ich das richtig?
Macht es Sinn eine Klasse zu schreiben, die aus dieser erbt, und dann zu erweitern?
Gibt es vllt schon Lösungsansätze im Netz?lg absolut_nooby
-
std::list bietet die Methode find an.
Du kannst überprüfen, ob ein bestimmer Wert in der Liste vorkommt, indem du schreibst:bool contains = mylist.find(value) != mylist.end();
-
absolut_nooby schrieb:
ich benutze die Bibliothek <list> in C++. Die Bibliothek enthält leider keine Routine für Contains oder ähnliches. Sehe ich das richtig?
List ist Teil einer Bibliothek, die unter anderem die generischen Algorithmen find und find_if enthält, in <algorithm>.
absolut_nooby schrieb:
Macht es Sinn eine Klasse zu schreiben, die aus dieser erbt, und dann zu erweitern?
Nein. Erstens sind die Container der Standardbibliothek nicht als Basisklassen gedacht, zweitens gibt's schon generische Funktionen für sequentielles Suchen.
-
Und hier noch der Link zur Doku mit Beispielen:
http://www.cplusplus.com/reference/algorithm/find
-
Irgendwie wird bei mir das find nicht erkannt:
#include <string> #include <list> #include <vector> #include <algorithm> list<string> test; test.push_back("ha"); test.push_back("ha2"); test.push_back("ha3"); test.find("ha"); //error C2039: 'find': Ist kein Element von 'std::list<_Ty>'
-
absolut_nooby schrieb:
Irgendwie wird bei mir das find nicht erkannt:
#include <string> #include <list> #include <vector> #include <algorithm> list<string> test; test.push_back("ha"); test.push_back("ha2"); test.push_back("ha3"); test.find("ha"); //error C2039: 'find': Ist kein Element von 'std::list<_Ty>'l'abra d'or schrieb:
Und hier noch der Link zur Doku mit Beispielen:
http://www.cplusplus.com/reference/algorithm/find
-
#include <string> #include <list> #include <algorithm> int main() { std::list<std::string> test; test.push_back("ha"); test.push_back("ha2"); test.push_back("ha3"); bool contains = std::find(test.begin(), test.end(), "ha") != test.end(); }Zur Ergänzung: Wenn du von anderen Sprachen kommst, wirst du vielleicht anfangs Probleme mit der STL haben, da sie nicht rein objektorientiert ist (Generische Funktionen in Kombination mit Objekten; C++ ist eine Multiparadigmensprache).
-
absolut_nooby schrieb:
Irgendwie wird bei mir das find nicht erkannt:
#include <string> #include <list> #include <vector> #include <algorithm> list<string> test; test.push_back("ha"); test.push_back("ha2"); test.push_back("ha3"); test.find("ha"); //error C2039: 'find': Ist kein Element von 'std::list<_Ty>'Schau dir bitte die Dokumentation genau an. Hast du dich nicht gewundert, warum du <algorithm> inkludierst, aber daraus nichts explizit nutzt?
find ist kein class member sondern eine freie Funktion.
list<string>::iterator result = find(test.begin(), test.end(), "ha"); if(result == test.end()) cout << "ha ist nicht enthalten!" << endl; else cout << "ha ist enthalten!" << endl;Du solltest dich ausgiebig mit den Konzepten der Standard-Lib von C++ befassen. Da die Iteratoren und Algorithm sehr oft vorkommen.
Buchtipp: http://www.amazon.de/Die-C-Standardbibliothek-Einführung-Nachschlagewerk/dp/3540256938