Mehrdimensionale Arrays mit flexibler Größe



  • Das schreit nach templates und fertigen Template-Bibliotheken!



  • Ja, im Prinzip schreit es danach, Decimad; der Prof ist aber der Meinung, wir sollen eigene Lösungen benutzen.
    Ich habe jetzt erst mal über std::vector gelöst; hoffentlich habe ich demnächst Zeit, mich weiter einzulesen.

    Danke erst mal für eure Hilfe!



  • du studierst?
    was denn? normale informatik?

    wenn ja, dann wird dein studiengang eigentlich voll genug sein, dass der prof dich nicht persönlich erkennt. das heisst, ihm es ist es vollkommen egal, wie du das löst...

    du musst doch eh nur eine lösung liefern können



  • Ja, ich studiere Physik. Das ist eine Wahlvorlesung und wir sind 13...



  • ok, dann klappt das nicht ganz.

    aber ist doch noch besser für dich. es soll funktionieren, wie ist doch egal...



  • Joa... funktioniert ja jetzt auch *gg*
    Wie gesagt, sollte ich Zeit finden lese ich mich nochmal etwas ein und mach dann ordentliche Template - vielleicht freunde ich mich dann auch mal genug mit der Sprache an, um sie im Alltag zu benutzen...



  • was?

    du machst das noch nicht??



  • Was von beiden meinst du?

    Einlesen? Das mit den Templates dauert wohl etwas länger *g*
    Im Alltag benutzen? Nö, Java finde ich (noch) viel umgänglicher, wenn es auch bei numerischen Aufgaben nicht ganz so schnell ist...



  • java kannst du für kleine buisiness anwendungen nehmen, bisschen webkrams auch. aber wenn du kontrolle willst, wenn du speed willst und wenn du spaß haben willst, nimm C++.

    damit kannste auch das andere geschlecht beeindrucken 😉
    hehe
    höhö
    haha



  • Skym0sh0 schrieb:

    java kannst du für kleine buisiness anwendungen nehmen, bisschen webkrams auch. aber wenn du kontrolle willst, wenn du speed willst und wenn du spaß haben willst, nimm C++.

    Zumal Java im Vergleich zu C++ in jeder Hinsicht ein ziemlicher Scheiß ist. 😉
    Vorausgesetzt natürlich, man bleibt bei C++ am Ball und lernt, die Sprache zu nutzen, denn man kann viel lernen und sich immer noch weiter verbessern.



  • nmn schrieb:

    Einlesen? Das mit den Templates dauert wohl etwas länger *g*

    "Modern C++", das Buch der Templates.



  • std__vector<> schrieb:

    nmn schrieb:

    Einlesen? Das mit den Templates dauert wohl etwas länger *g*

    "Modern C++", das Buch der Templates.

    meinst du den alexandrescu?



  • "C++ Templates - The Complete Guide" ist das Buch der Templates (OT: Templatebuch != Buchtemplate)



  • nonvec schrieb:

    (OT: Templatebuch != Buchtemplate)

    hehe^^



  • Skym0sh0 schrieb:

    std__vector<> schrieb:

    nmn schrieb:

    Einlesen? Das mit den Templates dauert wohl etwas länger *g*

    "Modern C++", das Buch der Templates.

    meinst du den alexandrescu?

    ja.



  • hat der Thread schon nen Ende?
    Ist es wirklich so problematisch da nen kleines Template zu schreiben?

    Also ich mein wenn du das in C++ machen willst dann mach es auch in C++ 🙂
    Das macht man einmal und dann hat man Ruhe.

    http://ideone.com/bvFc0B
    ungetestetes Beispiel



  • Tag!

    Sorry, ich musste auch mal nach Hause gestern *g*

    Habe mich etwas eingelesen auf eure Hinweise hin und das Ganze jetzt so gelöst, was eigentlich ganz einfach ist:

    template <int R, int C>
    class doubleMatrix {
      double cont[R][C];
      int rows, cols;
    public:
      doubleMatrix() {
        rows = R;
        cols = C;
      }
    };
    

    *hurra*

    Ich könnte jetzt auch noch double flexibel machen, aber da ich eh nix anderes verwende bleibt das erst mal so.

    Wenn ich jetzt
    std::array< std::array< double, C >, R > cont
    statt
    double[R][C]
    benutze meckert allerdings mein Heimcompiler, während der Uni-Compiler das schluckt... *gnah* ein Verständnisschritt vor und zwei zurück...
    Deinen Link werde ich nachher mal lesen, ScottZhang.

    Auf die Sprachendiskussion will ich mich gar nicht einlassen, nur mal kurz anmerken, dass modernes Java (7 oder 😎 nur noch numerisch in der Geschwindigkeit nachhinkt und es mehr eine Frage des Geschmacks ist. Die Ausführungsgeschwindigkeit ist ja meistens nicht mehr der Flaschenhals...



  • std::array ist C++11, wenn dein compiler zuhause das nicht schluckt, dann update den schnellstens mal(wobei, ich muss zugeben, dass ich mit msvc2010 auch keinen aktuellen benutze ;), liegt aber dran, dass ich in einem projekt bin in dem der genutzt wird)

    im "alten" standard war array noch im technical report 1 --> std::tr1::array

    egal, was ist, java läuft in mindestens einer abstraktionsschicht höher und allein da liegt schon ein geschwindigkeits verlust. klar kann man sich sein java programm so anpassen, dass es schneller als ein C/C++ programm ist, aber dann hat man auch nicht alle möglichkeiten von eben diesen sprachen ausgeschöpft.

    und genug jetzt mit flame wars. wer fängt son scheiss eig an??

    edit:
    statt sowas

    template <int R, int C>
    class doubleMatrix {
      double cont[R][C];
      int rows, cols;
    public:
      doubleMatrix() {
        rows = R;
        cols = C;
      }
    };
    

    eher sowas hier:

    template <int R, int C>
    class doubleMatrix {
    	double cont[R][C];
    	 const int rows;
    	 const int cols;
    public:
    	doubleMatrix() 
    	 : rows(R), cols(C)
    	{}
    };
    

    du kannst rows und cols ja eh nicht mehr ändern, da du das statische array nicht in der grösse ändern kannst



  • nmn schrieb:

    ich habe die Aufgabe, meinen funktionierenden (Java-)Code nach C++ zu übertragen. Mein Problem ist, dass ich nicht einfach wie gewohnt

    void f( int array[][] ) {
    }
    main() {
      int testvalues[][] = {...};
      f( testvalues );
    }
    

    schreiben kann, weil C++ feste Größen für die Arrays haben will.

    Jepp. Ein C++ Array ist auch etwas anderes als ein Java-Array. Java zwingt dir eine zusätzliche Indirektion auf. Die Größe des Arrays wird auch innerhalb der VM gespeichert und ist abfragbar. Wenn du in C++ ähnlichen "Luxus" haben willst, kannst du z.B. std::vector dafür nehmen.

    nmn schrieb:

    Ich möchte das eigentlich direkt lösen, ohne dafür Vektorklassen, die Boost Library oder ähnliches zu benutzen - ist das möglich?

    Möglich aber blöd. Echt jetzt.



  • Das mit der Compilerversion ist wohl die Lösung; wenn ich hier zu gcc47 wechsle funktioniert auch std::array.

    Ja, das wäre noch eine Idee, die Grö0en konstant zu setzen. Spart später eventuell mal viel Stress.

    Danke für die Hinweise, in welche Richtung ich das lösen kann. Im Moment funktionert das (noch) ziemlich gut so; ich werde auf lange Sicht sowieso nicht drumrumkommen, C++ anständig zu lernen (auch wenn ich dann als Mac-Exot noch eine Möglichkeit finden muss, für andere Systeme zu kompilieren).

    Von mir aus kann der Thread an sich als gelöst gelten 👍


Anmelden zum Antworten