Frage zur Implementation von Algorithmus (Iterator)
-
Hallo,
ich wollte jetzt mal eine Funktion im Stil der STL Algorithmen schreiben (Vorbild ist der next_permutation Algorithmus). Mein Ansatz ist Folgender:template<typename T> bool bruteforce (const T* first, const T* last) {/*...*/}Allerdings kann ich keine Iteratoren von STL Containern als Parameter übergeben ("no matching function call").
Welchen Parametertyp muss ich wählen, damit meine Funktion mit Iteratoren von STL Containern und zusätzlich mit "normalen" Zeigern arbeiten kann? Kann man überhaupt so ohne weiteres Iteratoren als Parameter verwenden? Und um Flames vorzubeugen: Ja, ich bin noch ein Anfänger
mfg
-
Mit..
T beg, T end
... als Parameter sollte es funktionieren.
Um die Kompatibilität mit Iteratoren innerhalb der Funktion zu gewährleisten, sollte auf Variablen vom Typ T nur ++,--,!=,==,* und -> angewendet werden.Schlagt mich, wenn ich falsch liege

-
Chris31 schrieb:
Schlagt mich, wenn ich falsch liege

Jein.
Ich würd den Templateparameter umbenennen um karzumachen, zu welcher Iteratorkategorie die Iteratoren gehören sollen. (bzgl. Iteratorkategorien siehe hier).
Also z.B.
template <class InputIterator> void brute_force(InputIterator first, InputIterator last)Unter http://www.cplusplus.com/reference/algorithm/ siehst du Beispiele, dort heißen die Templateparameter entsprechend RandomAccessIterator, ForwardIterator, InputIterator usw.
Pointer sind im Sinne dieser Algorithmen dann RandomAccess-Iteratoren. Innerhalb deines Algorithmus kannst du dann noch die std::iterator_traits für die entsprechenden Iteratortypen benutzen (geht auch für Pointer)