Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » mem_fun

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.12.2005, 13:24 Uhr
~Valentin
Gast



C++:

typedef bool (* compare_type) (value_type const &, value_type const &);
compare_type compare;

partition(begin,end,bin2nd(mem_fun(bool(compare)()),end);




was mach ich da falsch? hat wer dazu eine idee
mfg
Valentin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.12.2005, 21:15 Uhr
~Valentin
Gast


okok
ein bisschen wenig

es geht darum:
das soll eine art quicksort werden wobei die predikat funktion zweistellig is..


C++:
bool compare (value_type const & lhs, value_type const & rhs);


und das partition dann so in etwa ausschauen soll


C++:
typedef bool (* compare_type) (value_type const &, value_type const &);
compare_type compare;

partition(begin,end,bind2nd(mem_fun(compare),rend);



und dabei kommen dann einige nette fehler (...cannot deduce template argument..)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: