schönes c++?



  • 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.



  • hustbaer schrieb:

    ;fricky schrieb:

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

    naja z.b. beim sortieren von arrays etc.

    ok, aber swappen innerhalb von arrays ist ja in Java kein problem (^^hab weiter oben ein beispiel gezeigt).

    hustbaer schrieb:

    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.).

    wieso schneller? umschaufeln der speicherinhalte ganzer objekte kann doch nicht schneller sein, als das umhängen von referenzen.
    🙂



  • Die value-semantics sagt aus wie man dem Assignment-Operator zur interpretieren hat und nicht ob ich nun den Wert oder die Referenz swappe.
    Weil template <class T> void swap(T& x,T& y) kann ich SmartPointer übergeben und Sematisch werden ist das halt ein Referenztausch, oder - versteh ich C++ zu schlecht?



  • Zeus schrieb:

    Weil template <class T> void swap(T& x,T& y) kann ich SmartPointer übergeben und Sematisch werden ist das halt ein Referenztausch, oder - versteh ich C++ zu schlecht?

    ich verstehe von c++ wahrscheinlich viel weniger als du, aber für mich sieht das so aus, als sollen die inhalte von x und y selbst getauscht werden. sind x und y nun ziemlich grosse objekte, dürfte so'n tausch verdammt ungeil sein. sind x und y pointer, wäre es viel schneller. deswegen ja (immer noch) meine frage: wann ist es sinnvoll, objektinhalte selbst zu swappen anstatt referenzen (oder pointer).
    und noch 'ne frage: da man ja nicht einfach rohen speicher rumschaufeln sollte (wie Nexus z.b. erzählt hat), wie funktioniert so'n tausch überhaupt? bei nichttrivialen objekten müssten es doch tiefe kopien werden. sowas macht C++ ja nicht automatisch (Java aber kann das, hähä). müssen die objekte 'swappable' sein, oder wie läuft das?
    🙂



  • ;fricky schrieb:

    müssen die objekte 'swappable' sein, oder wie läuft das?
    🙂

    quasi. Ein Objekt ist swappable, wenn für jeden Member gilt: er ist swappable. Merke: ist ein Objekt kopierbar, ist es swappable. Solange man also nicht mit zeigern rumhantiert ist man automatisch auf der sicheren Seite.



  • ;fricky schrieb:

    sind x und y nun ziemlich grosse objekte, dürfte so'n tausch verdammt ungeil sein.

    Wenn für die Klasse kein swap() bereitstellt, ist das sehr gut möglich. Sobald man aber eine sinnvolle Tauschfunktion einrichtet, wird ein Tausch nicht nur exceptionsicher, sondern sehr performant, wie schon Shade Of Mine erzählt hat. Das ist ja das Gute: Wenn du z.B. zwei Container mit mehreren Millionen Elementen hast, kannst du diese in konstanter Zeit austauschen. Das läuft fast aufs Gleiche wie ein Zeigertausch hinaus, funktioniert aber auch, wenn beide Objekte im automatischen Speicherbereich angelegt wurden.

    Sei doch bitte in Zukunft etwas mehr auf diese Weise interessiert, solche Diskussionen mag ich nämlich. 🙂


Anmelden zum Antworten