bigpoint Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 Zwei Fragen : 1. Wie kann ich in einem Vector beliebigen Satz finden ? 2. Wie kann ich in einem Vector beliebigen Satz ändern? Zitieren
carstenj Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 Hallo, da bist du ja knapp über die 10 Zeichen Mindestanfoderung hinausgekommen. 1. Du musst deinen Vector von vorne bis hinten nach dem entsprechenden Begriff durchsuchen....Stichwort: Schleife und Iterator Oder, besser, mit find: http://www.parashift.com/c++-faq-lite/class-libraries.html#faq-37.3 2. Ändern kannst du ganz einfach, sofern der Iterator auf den entsprechenden Vectoreintrag zeigt Vielleicht hilft dir das im Ansatz weiter: http://www.cppreference.com/iterators.html EDIT: Wenn du überwiegend Suchen möchtest, bietet sich evtl. noch ein set an: http://www.cppreference.com/cppset/ Zitieren
bigpoint Geschrieben 16. Juni 2005 Autor Geschrieben 16. Juni 2005 1. Du musste deinen Vector von vorne bis hinten nach dem entsprechenden Begriff durchsuchen....Stichwort: Schleife und Iterator gibt es keine find Methode wie bei map und so algemein was ist besser für meinen einsatz, ich habe ja eine struct sagen wir typedef struct { int index; long fallid; short iStatus; } tTest; [/PHP] die übergebe ich einem vector vector<tTest, allocator<tTest> > m_tTest; dann schreibe ich par Daten rein und jetzt entlich will ich was in dem vector ändern, einfügen usw. Zitieren
carstenj Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 gibt es keine find Methode wie bei map Doch, std::find. Fiel mir aber auch erst später ein. Hier vielleicht noch ein besseres Beispiel: http://gpwiki.org/index.php/Standard_Template_Library Zitieren
bigpoint Geschrieben 16. Juni 2005 Autor Geschrieben 16. Juni 2005 Doch, std::find. Fiel mir aber auch erst später ein. QUOTE] also vector hat keine find Methode, oder mindestens kann ich nichts finden Zitieren
Mephisto81 Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 carstenj hat dir doch schon alles gegeben was du brauchst. Schau mal auf den Link den er vorher gepostet hat, da steht alles was du brauchst: [...] std::vector<int> bigvector; // Some code filling bigvector with lots of stuff: std::vector<int>::iterator five = std::find(bigvector.begin(), bigvector.end(), 5); // Five will be bigvector.end() if there is no element 5 found, // otherwise it will point to the first 5 in the vector. [...] (aus http://gpwiki.org/index.php/Standard_Template_Library ) wo liegt das problem? greetz (der etwas ratlose) mep... Zitieren
bigpoint Geschrieben 16. Juni 2005 Autor Geschrieben 16. Juni 2005 wo liegt das problem? soger zwei probleme :confused: da ich in dem vector nicht nur ein einziegen Wert vector<int> habe sondern eine struct und zweites prob. error C2039: 'find' : Ist kein Element von 'std' Zitieren
Mephisto81 Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 Hallo, zu 1.) Ich denke das du für std::find den "operator==()" in deinem struct implementieren musst um entsprechend danach zu suchen (naheliegende Vermutung - werde ich aber gleich mal testen). zu 2.) Hast du die Includedatei <algorithm> eingebunden? (Wenn ich die rausgenommen hab in meinem Testprogramm, bekam ich auch diesen Fehler) Gruß mep Zitieren
Klotzkopp Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 Man kann auch find_if benutzen, da kann man ein Vergleichsfunktionsobjekt angeben. Zitieren
bigpoint Geschrieben 16. Juni 2005 Autor Geschrieben 16. Juni 2005 Man kann auch find_if benutzen, da kann man ein Vergleichsfunktionsobjekt angeben. jetzt wird komplieziert kannst Du einen Beispiel zeigen Zitieren
Mephisto81 Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 Man kann auch find_if benutzen, da kann man ein Vergleichsfunktionsobjekt angeben. Stimmt, das geht auch Wäre meine zweite Option gewesen. Das ist, denke ich , auch sauberer als in einem struct Operatoren zu überladen. Nichtsdestotrotz hab ich das gerade erfolgreich mal getestet um das von oben zu ergänzen greetz mep Zitieren
Klotzkopp Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 kannst Du einen Beispiel zeigen #include <vector> #include <algorithm> #include <iostream> using namespace std; struct Daten { int wichtig; int egal; }; struct FindeWichtig { bool operator()(const Daten& daten) { return daten.wichtig == w_; } int w_; }; int main() { vector<Daten> v; Daten d1 = { 1, 2 }; Daten d2 = { 3, 6 }; Daten d3 = { 8, 42 }; v.push_back(d1); v.push_back(d2); v.push_back(d3); FindeWichtig fw; fw.w_ = 3; vector<Daten>::iterator i = find_if(v.begin(), v.end(), fw); if(i != v.end()) { cout << "Gefunden (egal=" << i->egal << ")\n"; } }[/code] Zitieren
bigpoint Geschrieben 16. Juni 2005 Autor Geschrieben 16. Juni 2005 Danke Klotzkopp, habe ich verstanden Noch was jetzt will ich den vector in eine andere Klasse aufrufen. Muss ich in der Klass wieder die structur definieren oder wie kann man es am einfachstem lösen ? Zitieren
bigpoint Geschrieben 16. Juni 2005 Autor Geschrieben 16. Juni 2005 Noch was jetzt will ich den vector in eine andere Klasse aufrufen. Muss ich in der Klass wieder die structur definieren oder wie kann man es am einfachstem lösen ? das könt ihr vergessen :eek ist aber der einsatz mit einem vector im meinem Fall ok, oder lieber list map usw benutzen ?? Zitieren
Klotzkopp Geschrieben 16. Juni 2005 Geschrieben 16. Juni 2005 ist aber der einsatz mit einem vector im meinem Fall ok, oder lieber list map usw benutzen ??Das lässt sich mit den Informationen, die du bisher geliefert hast, nicht sagen. Wie sehen die Anwendungsfälle aus? Viele Einfüge-/Löschvorgänge? Falls ja, vorne oder hinten oder mittendrin? Oder statische Daten? Viele Suchvorgänge oder Zugriffe über Index? Zitieren
bigpoint Geschrieben 17. Juni 2005 Autor Geschrieben 17. Juni 2005 Das lässt sich mit den Informationen, die du bisher geliefert hast, nicht sagen. Wie sehen die Anwendungsfälle aus? Viele Einfüge-/Löschvorgänge? Falls ja, vorne oder hinten oder mittendrin? Oder statische Daten? Viele Suchvorgänge oder Zugriffe über Index? Also in dem vector können maximal 5 Einträge sein Einfügen immer hinten, ändern beliebig aber auch nicht oft und dem entsprechend nicht viele Zugriefen über Index. Ich Speiche/Bearbeite die Daten im vector damit ich sie später in andere Klasse ausgeben kann. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.