String: n'tes vorkommen eines Zeichens
-
CStoll schrieb:
...
Allgemein meine ich mal was gelesen zu haben, dass die Praedikate fuer derartige Suchen moeglichst kontextfrei sein sollten.
Ja, das versuche ich auch schon zu erklären ;)...
ICH hatte das auch verstanden.
Auch wenn ich das mit der "Sequenzbeliebigkeit" nicht verifizieren kann, ist das "Kopierargument" schon das K.O.-Kriterium.
Wäre ich nicht drauf gekommen (obwohl doch offensichtlich das Prädikat schon in der Schnittstelle als Kopie entgegengenommen wird).Hmmmmm - schade eigentlich, weil es IMHO das Prädikatkonzept (für den Anwender) reichlich einschränkt (und dem Implementierer dafür mehr Freiheiten gibt)....
Danke,
Simon2.
-
Th schrieb:
Hallo pumuckl (hast du auch so rote Haare?),
In letzter Zeit nicht, hatte ich aber lange Zeit (daher der Nick), kommt auch wieder
zu a: doch, in C/C++ kann man sich darauf verlassen, daß die logischen Operatoren && und || vorabweisend sind.
Okay, dann hab ich da wohl Mist gelesen oder es einfach falsch verstanden.
zu b:
die Version von Simon sucht das nächste Zeichen hinter den n-gefundenen Zeichen, daher seine Variable 'foundLastTime'.d.h. bei deinem Code müßte man noch die letzte Zeile ändern:
return start!=end? start+1 : end;
Und die while-Schleife sollte man auch noch auf "start != end" testen, falls weniger als n-Zeichen enthalten sind.
Naja bei meiner Version hab ich mich an die Standard-finds angelehnt, die den iterator auf das erste gefundene Element (und nicht das dahinter) liefern. Hatte dann bei Simons praedikat selbiges angenommen und nicht weiter auf das "after" im Namen geachtet - mea culpa. Und den Test in der while-Schleife benoetigt man auch nicht unbedingt, da find(it, it, bla) ja wohldefiniert ist und einfach it liefert. Klar kann man wieder versuchen, (vorzeitig) zu optimieren, aber wenn man davon ausgeht, dass bei der Suche nach dem n-ten Element das Element meistens auch tatsaechlcih n-mal vorhanden ist, wird die zusaetliche Abfrage eher zum Performancefresser als -retter.
CStoll schrieb:
Der Default-Ctor wird nicht generiert, wenn du einen eigenen Ctor hast - Copy-Ctor und operator= deklariert der Compiler auf jedem Fall (es kann nur passieren, daß er sie nicht definieren kann, weil irgendwas die klassische Kopier/Zuweisungssemantik verhindert). Und mit den const-Elementen lässt sich zwar ein Copy-Ctor anlegen, aber kein Zuweisungsoperator.
Wieder ein Detail gelernt, danke!