001
16.12.2005, 16:10 Uhr
virtual
Sexiest Bit alive (Operator)
|
Hallo,
du sagst uns leider so oder so nicht alles: es wäre Gut, wenn Du generell sagen würdest, was denn schief geht.
So wie es da steht muß ich zunächst mal davon ausgehen, daß Du alles ausserhalb einer Klasse gemacht hast, Ein mem_fun Adaptor ist allerdings für member, d.h. Nicht statische Methoden einer Klasse gedacht.
Aber fangen wir mal an, daß Problem auseinander zunehmen, vielleicht ist da ja was bei, was für Dich interessant ist. Zunächstmal der Partition aufruf, ganz ohne klassen könnte ja so aussehen:
C++: |
int array[] = { 1, 9, 3, 7, 4 }; int* begin = array; int* end = begin+sizeof(array)/sizeof(*array);
int* p = std::partition(begin, end, std::bind2nd(std::less<int>(), 7));
|
Du siehst, ich habe auch partition verwendet und bind2nd. Und da sind wir schon beim ersten Problem: bind2nd erwartet als zweiten Parameter einen Wert. Du übergibst bei Dir mit "end" aber einen Iterator. Das passt nicht. Aber selbst ein
C++: |
partition(begin,end,bin2nd( ..., *end);
|
Wird dir nichts helfen, weil end im Allgemeinen auf ein Element zeigt, welches nicht da ist. Wenn Dein Ziel ist, quasi das letzte Element eine Sequenze zwischen begin und end zu nehmen, so ist das nicht etwa "end", sondern - um bei meinem Beispiel zu bleiben:
C++: |
int* p = std::partition(begin, end, std::bind2nd(std::less<int>(), *(std::reverse_iterator<int*>(end)) ));
|
Übersichtlicher ist mithin
C++: |
std::reverse_iterator<int*> rend(end) int* p = std::partition(begin, end, std::bind2nd(std::less<int>(), *rend));
|
Für den mem_fun - Kram fühle ich mich erst zuständig, wenn ich mehr Infos habe -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |