Implementation einer Prozedur(benutzerdefinierte Datentypen)
-
Guten Abned,
ich sitze an folgender Aufgabe und suche einen Ansatz, bzw eine Hilfestellung:"Vervollständigen sie die Prozedur, die aus einem Vektor von Namen diejenigen Namen ein einen neuen Vektor übernimmt, die einen bestimmten Nachnamen haben.
Verwenden sie zum Iterieren einen Index(size_type) statt eines Iterators. "Gegeben ist:
typedef std::vector<name> vec_name; vec_name filter(const vec_name& namen, const std::string& gesuchter_nachname) { vec_name result; return result; } TEST_CASE("filter", "filter") { name x = {"Klaus", "Meier"}; name y = {"Joachim", "Schulz"}; name z = {"Werner", "Meier"}; vec_name namen; namen.push_back(x); namen.push_back(y); namen.push_back(z); vec_name ergebnis = filter(namen, "Meier"); namen.erase(namen.begin() + 1); CHECK(ergebnis == namen); }MfG hubabuba111
-
Ansatz: for-Schleife
Jedes weitere Wort wäre ja schon die vollständige Imolementierung.
-
ein paar worte mehr wären sicherlich hilfreich...
-
Du sollst etwas lernen. Zeig was du versucht hast, wenn es dann nicht klappt kannst du vielleicht einen Tipp bekommen.
-
Das ist mal eine schöne Aufgabe! Ich denke, Du kannst Dich glücklich schätzen, einen kompetenten Lehrer gefunden zu haben, der solche Aufgaben stellt.
Wie wurde denn der Typ name definiert?
struct name { std::string vorname; std::string nachname; };So?
Ich frage eher aus Neugier, wobei diese Definition für die Implementierung der Funktion filter schon wichtig ist, wenn es um den Vergleich der Namen geht.
Viel mehr darf man Dir wirklich nicht verraten, wenn man keine Komplettlösung zeigen will. Wenn Du gar nicht weiter weißt, versuch wenigstens in Form von normalem deutschem Text eine Lösungsidee zu beschreiben. Wo hakt es denn?
Edit: Warte mal, die Überprüfung beim Testcase ist ja falsch. Das +1 hinter begin() müsste eigentlich weg, oder nicht?
-
krümelkacker schrieb:
Warte mal, die Überprüfung beim Testcase ist ja falsch. Das +1 hinter begin() müsste eigentlich weg, oder nicht?
Nein, "Schulz" wird entfernt und die beiden "Meier" gegen die "Meier" aus dem Filter verglichen
-
Na wie siehts nun aus?
Poste doch mal Deine Lösung. Dann können wir darüber herfallen
und Du lernst auch was dabei 
-
vec_name filter(const vec_name& namen, const std::string& gesuchter_nachname) { vec_name result; std::vector<name>::size_type index; for(index = 0 ; index!= namen.size(); ++index) { name derzeitiger_name = namen.at(index); if(derzeitiger_name.nachname == gesuchter_nachname) { result.push_back(derzeitiger_name); } } return result; }
-
Und was funktioniert daran nicht?
-
@krümmelkacker deine Definition ist richtig.
struct name { std::string vorname; std::string nachname; };Thread kann geschlossen werden!