S
hi,
idefix schrieb:
Habe mal'ne Frage zur Funktion find_in
also angenommen (position eintrag)
0 A, 1 B,2 C, 3 C, 4 D, 5 D, 6 E sind in der Mapppe.
suche C vorwärts würde position 3 ergeben
suche C rückwärts würde position 3 ergeben
Also soll die Funktion den letzten in vorwärts Richtung finden
und den ersten in rückwärts Richtung.
Ja, die Funktion soll in jedem Fall die letzte Uebereinstimmung (von vorne her gesehen) finden;
Aber vielleicht hab ich ja da mal wieder ein grundlegendes Verstaendisproblem, ich dachte, dass bei der Suche mit nem iterator von vorne, und mit nem reverse_iterator eben von hinten "gesucht" wird, so dass die iterator-Variante bei Deinem Beispiel die "Zeile:" 3 C, und bei der reverse_iterator-Variante die "Zeile:" 2 C zurueckgeben taete, wohlbemerkt ohne die break-Version bei der reverse_iterator-Variante.
Bei Deinem Vorschlag mit der ueberladenen Version wird bei der reverse_iterator-Variante schon beim ersten Fund returned, was (eigentlich sollte die Funktion
find_last_in(X,Y,S) statt find_in(X,Y,S) heissen) dann latuernich genauso den gewuenschten Effekt erzielt.
Ab hier wird's meines Erachtens philosophisch, bzw. es geht dann halt um Programmierstil. Zum Vergleich hier nochmal meine komplette Version:
template <class It>
inline bool REV_IT(It){
return false;
}
template <class It>
inline bool REV_IT(std::reverse_iterator<It>) {
return true;
}
template<typename InIt, typename K, typename S>
InIt find_in(InIt BEG, InIt FIN, const S LAST_OPEN){
InIt RESULT = FIN;
while(BEG != FIN){
if(strcmp((*BEG).second.c_str(), LAST_OPEN.c_str()) == 0){
RESULT = BEG;
if(REV_IT(BEG))
break;
}
++BEG;
}
return RESULT;
}
21 zu 27 Zeilen, oder 485 zu 633 Bytes
Aber Spass beiseite, ich bin latuernich als Anfaenger auch an einer Bewertung der Programmierstils interessiert, hier in meinem Kaemmerchen die Dinge wertfrei nur so zu laufen zu bekommen kann's ja auch nicht sein, und Bytes bzw. Zeilen zu zaehlen scheint mir doch auch ein wenig zu lapidar.
Also bitte, keine Scheu vor Bewertung...
solong
SF