schönes c++?



  • volkard schrieb:

    ;fricky schrieb:

    volkard schrieb:

    Kannst Du was bauern, das

    int a=4;
    int b=5;
    swap(a,b);
    

    ermöglicht? Ja oder nein? Wenn ja, gib Code an.

    so etwa in Java:

    int[] a = {4,5};
    swap(a);
    

    wie baust du swap?
    und komm mir nicht mit lösungen, die so umständlich zu benutzen sind wie

    int a=4;
    int b=5;
    
    //begin swap
    int[] c = {a,b};
    swap(c);
    a=c[0];
    b=c[1];
    //swapped in only 4 lines of code
    

    nee, in Java swapped man ints nicht so. in Java gibts keine referenzen auf einfache typen. wenn du in Java ein int-swapping intensives programm machen wilst, dann musste arrays nehmen. also so dann:

    int[] array = {....};  // n elemente
    ...
    swapInts (array, 3, 91);   // elemente 3 und 91 tauschen
    ...
    public static void swapInts (int[] array, int p, int q)
    {
       int temp = array[p];
       array[p] = array[q];
       array[q] = temp;
    }
    

    wenn du stattdessen nur mal eben 'nen swap von zwei variablen 'on the fly' brauchst, dann schreibst du's eben direkt hin: int t=a; a=b; b=t;
    ^^ in unterschiedlichen programmiersprachen geht sowas nunmal anders.
    🙂



  • volkard schrieb:

    //swap(parent1.left,parent2.right.left); 
    {Node tmp=parent1.left; parent1.left=parent2.right.left; parent2.right.left=tmp;}
    

    etwas swap-ähnliches schreiben zu dürfen.

    Java kann bestimmte Sachen einfach nicht ausdrücken. Da mangelts an Abstraktionsmöglichkeiten und das ist low im Level. In diesem Punkt ist C highleveliger als Java. Tja, traurig aber wahr.

    Das glaubst du doch selbst nicht. Also ist Asm das Highlevelige an allen Sprachen, weil du damit Sachen ausdrücken kannst, die du in Ruby, Php und Java nicht kannst?

    Das ist doch die Definition einer hochabstrakten Sprache, dass du eben die Low-Level-Sachen nicht mehr (oder nur umständlich) machen kannst. Bytes zu swappen ist für mich low-level. Mir wäre es sogar lieber, wenn man in Java ganz auf primitive Typen verzichtet hätte.



  • DEvent schrieb:

    Bytes zu swappen ist für mich low-level. Mir wäre es sogar lieber, wenn man in Java ganz auf primitive Typen verzichtet hätte.

    Ich wiederhole mich gerne nochmals:

    Nexus schrieb:

    Aber wieso zählst du swap() als Low-Level-Funktionalität?

    Es geht ja gar nicht um Bytes. Wenn man in Java einen Dreieckstausch macht, hat man nie mit Bytes oder Bits zu tun (in C++ übrigens auch fast nie). Trotzdem besitzt der Tausch zweier Objekte eine Semantik, die auch auf höherem Abstraktionslevel von Bedeutung sein kann.

    Das Inline-Schreiben des Tauschs über drei Zuweisungen ist meiner Ansicht nach eher Low-Level als ein swap() -Funktionsaufruf, weil die temporäre Variable ein Implementierungsdetail ist. In diesem Punkt abstrahiert C++ sogar besser, da es eine fertige Funktion für sowas anbietet und es dem Aufrufer egal sein kann, auf welche Weise zwei Objekte getauscht werden.



  • Schlimmer noch:
    ein generisches swap() geht in Java garnicht performant. Da muss man clone() 2 mal aufrufen. Sehr böse Sache sowas.

    swap() kann in Java immer nur das Objekt selber. Aber auch das funktioniert nur so halb, da du ja keine referenzen tauschen darfst (du weisst ja nicht wer aller handles darauf hat).

    Deshalb kopiert man in Java einfach. Sowas kommt halt davon wenn man sich C als Grundlage aussucht :p Aber das kopieren geht schnell genug, ist also mehr ein ästhetisches Problem denn ein praktisches.



  • Nexus schrieb:

    DEvent schrieb:

    Bytes zu swappen ist für mich low-level. Mir wäre es sogar lieber, wenn man in Java ganz auf primitive Typen verzichtet hätte.

    Ich wiederhole mich gerne nochmals:

    Nexus schrieb:

    Aber wieso zählst du swap() als Low-Level-Funktionalität?

    Es geht ja gar nicht um Bytes. Wenn man in Java einen Dreieckstausch macht, hat man nie mit Bytes oder Bits zu tun (in C++ übrigens auch fast nie). Trotzdem besitzt der Tausch zweier Objekte eine Semantik, die auch auf höherem Abstraktionslevel von Bedeutung sein kann.

    Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard). Es gibt halt keine swap() Funktion, die genauso wie in C/C++ aufgebaut ist, trotzdem kannst du Werte durch austauschen sortieren, oder die Teilbäume eines Baumgraphen vertauschen.

    Nexus schrieb:

    Das Inline-Schreiben des Tauschs über drei Zuweisungen ist meiner Ansicht nach eher Low-Level als ein swap() -Funktionsaufruf, weil die temporäre Variable ein Implementierungsdetail ist.

    In diesem Punkt abstrahiert C++ sogar besser, da es eine fertige Funktion für sowas anbietet und es dem Aufrufer egal sein kann, auf welche Weise zwei Objekte getauscht werden.

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.



  • DEvent schrieb:

    Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard).

    War beides kein swap.

    Es gibt halt keine swap() Funktion, die genauso wie in C/C++ aufgebaut ist

    nehmen wir man swap aus qbasic.

    trotzdem kannst du Werte durch austauschen sortieren, oder die Teilbäume eines Baumgraphen vertauschen.

    sinnigerweise mit ausgeschriebenem dreieckstausch. die anderen lösungen sind nicht hilfreich, sondern nur unfug.

    DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.



  • volkard schrieb:

    DEvent schrieb:

    Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard).

    War beides kein swap.

    Wieso war beides kein swap?

    volkard schrieb:

    DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.

    Hast du auch ein Link dafür?



  • DEvent schrieb:

    volkard schrieb:

    DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.

    Hast du auch ein Link dafür?

    Ja http://www.c-plusplus.net/forum/viewtopic-var-t-is-254818-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html



  • DEvent schrieb:

    Wieso war beides kein swap?

    http://en.wikipedia.org/wiki/Swap_(computer_science)



  • DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Dir mag vieles an C++ neu sein. Ja, die Sprache ermöglicht ein einfach anzuwendendes swap() , ganz im Gegensatz zu Java, wo sich für einen generischen Tausch eine Inline-Lösung immer noch am meisten lohnt.

    P.S.: Nein, ich habe grundsätzlich nichts gegen Java. Aber die ganze Zeit oberflächlich von High-Level-Sprache zu sprechen und Probleme, die Low-Level-Workarounds erfordern, damit rechtzufertigen ist etwas fragwürdig.



  • volkard schrieb:

    DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.

    er meint ja die sprache. hat er extra kursiv geschrieben, nicht irgendwelche funktionen einer library (auch wenn sie dabei ist).
    btw, kennt einer eigentlich ein sinnvolles beispiel, bei dem objekte selbst geswappt werden müssen? eigentlich reichts doch immer, wenn man referenzen rumschubst anstatt objektinhalte auszutauschen.
    🙂



  • §25.2.2. Also gehörts zur Sprache. Klugscheißer.



  • volkard schrieb:

    DEvent schrieb:

    Wieso war beides kein swap?

    http://en.wikipedia.org/wiki/Swap_(computer_science)

    Nach dieser Definition frag ich mich überhaupt ob eine Funktion in eine funktionale Programmiersprache überhaupt Swap heissen darf. XD



  • Wie ist das eigentlich wieder zu einem weiteren Java vs. C++ - Thread geworden?
    Ob Java oder nun C++ besser ist, stand eigentlich nie zur Debatte.



  • Michael E. schrieb:

    §25.2.2. Also gehörts zur Sprache. Klugscheißer.

    Clauses 2 through 16 describe the C++ programming language. That description includes detailed syntactic specifications in a form described in 1.6. For convenience, Annex A repeats all such syntactic specifications.

    Clauses 17 through 27 (the library clauses) describe the Standard C++ library, which provides definitions for the following kinds of entities: macros (16.3), values (clause 3), types (8.1, 8.3), templates (clause 14), classes (clause 9), functions (8.3.5), and objects (clause 7).



  • Nanyuki schrieb:

    Wie ist das eigentlich wieder zu einem weiteren Java vs. C++ - Thread geworden?
    Ob Java oder nun C++ besser ist, stand eigentlich nie zur Debatte.

    dabei enthält des OPs posting genug hinweise zum ablästern über c++, ohne dass man Java überhaupt erwähnen müsste. echt schwache vorstellung diesmal. *fg*
    🙂



  • Daniel E. schrieb:

    Michael E. schrieb:

    §25.2.2. Also gehörts zur Sprache. Klugscheißer.

    Clauses 2 through 16 describe the C++ programming language. That description includes detailed syntactic specifications in a form described in 1.6. For convenience, Annex A repeats all such syntactic specifications.

    Clauses 17 through 27 (the library clauses) describe the Standard C++ library, which provides definitions for the following kinds of entities: macros (16.3), values (clause 3), types (8.1, 8.3), templates (clause 14), classes (clause 9), functions (8.3.5), and objects (clause 7).

    da hast du's michael E. <-- selber klugscheisser.
    🙂



  • Dann hast du wohl wieder im Erbsenzählen gewonnen. Herzlichen Glückwunsch. Da kann keiner mithalten. Klugscheißer.



  • ;fricky schrieb:

    kennt einer eigentlich ein sinnvolles beispiel, bei dem objekte selbst geswappt werden müssen?

    naja z.b. beim sortieren von arrays etc.

    eigentlich reichts doch immer, wenn man referenzen rumschubst anstatt objektinhalte auszutauschen.

    in C++ arbeitet man wo es geht mit value-semantics, und nicht mit reference-semantics, weil's einfach schneller ist (weil keine/weniger dynamische speicheranforderungen z.b.).



  • Michael E. schrieb:

    Dann hast du wohl wieder im Erbsenzählen gewonnen. Herzlichen Glückwunsch. Da kann keiner mithalten. Klugscheißer.

    naja du hast ja wohl mit erbsenzählen angefangen. die unterscheidung sprache <-> library ist zumindest für mich total klar, und somit auch klar dass std::swap nicht zur sprache gehört.


Anmelden zum Antworten