Referenzen von Arrays



  • Hallo, vielen Dank an Euch alle, Ihr habt mir sehr geholfen
    pepe-je



  • Endlich habe ich das auch mal verstanden, thx ^^
    und da ihr so in fahrt gekommen seit habe ich gleich noch 3 Fragen :þ

    1. Was hat das mit "<" und ">" aufsich?
    `-> also, cin muss man ja immer "<<" und cout ">>" aber was bedeutet das dO.0b?

    2. das mit "&irgendwas" verstehe ich immer noch nicht obwohl ich mir schon zahlreiches reingezogen habe.

    3. Wie verbinde ich variablen usw...?
    -\> z.B.: In Java kann ich text und variablen usw.. mit "+" verbinden/dranhängen |-> String text = variable +"Irgendwelcher Text" +zahl;
    -\> Z.B.: In PHP macht man das mit "."; |-> text = variable."Text".zahl;

    So wollt keinen neuen Thread erstellen nur weil ich in diesem was nicht verstanden habe (siehe Frage 1 u. 2) und die dritte quält mich schon seit ich heute mit C++ angefangen habe :þ



  • 1 siehe operator überladen
    2 gibt dir die adresse von irgendwas im spiecher zurück
    3 du musst den umweg über stringstreams und << gehen. die c++ler fanden wohl, dass ein string nichts können soll, obwohl man da genauso + überladen hätte können.



  • 1. Habe ich mir ja schon angeschaut, versteh aber ned. Könnte man da nicht mal son gutes beispiel machen wie hier mit zeigern?

    2. Sagt mir auch nicht viel
    3. Ebenfalls



  • 2. was sagt dir nichts? Speicher oder Adresse?



  • Nene, ich weis zwar was damit gemeint ist, doch ich kann es mir nicht vorstellen wie das funktionieren soll und in welcher form diese zurückgegeben werden.

    z.B.: bei GetMousePos(&pos), was soll das das &pos bewirken? (steht in manchen beispiele die zur ermittlung der Mausposition dienen)



  • Du gibts der Funktion GetMousePos die Adresse der Variable wo die Position hin geschrieben werden soll.
    Wenn die pos Variable nicht als Pointer oder Referenz übergeben würde, dann würde GetMousePos nur mit einer Kopie arbeiten und wenn die Funktion beendet wäre, hätte sich nichts in der eigentlichen pos Variable geändert.



  • Also, nur damit ich es richtig verstehe:

    int a;
    
    test(&a);
    
    void test(int b){
      b=30;
    }
    

    Würde hier jetzt a auf die 30 zeigen?





  • Ahh,ein SEHR gutes tutorial 🙂
    Danke 😃



  • Hallo zusammen,

    ich quäle mich auch seit einer Weile durch die Vektor Klasse. Leider findet man im Netz nur wenig zu der hier angesprochenen Form einer Matrix.
    Ich stelle mir schon seit geraumer Zeit die Fragen:
    Wie wirken die Methoden size und resize auf die Matrix? Gibt size wirklich die Größe der Matrix zurück oder die der ersten Dimension?
    Beispiel:
    vector<vector<double>> vvdAuto;
    // jetzt sollte der Wert von auto NULL sein, oder?
    vvdAuto.resize(2); // wird nun die erste Dimension auf 2 Elemente gesetzt?
    // wenn ich nun ein Paar Werte in meine Matrix eintrage, also z.B.
    vvdAuto[0].push_back(3.2);
    vvdAuto[0].push_back(3.7);
    vvdAuto[1].push_back(4.8);
    // Auslesen der Größe der Matrix:
    vvd.Auto.size(); // was wäre das Ergebnis??
    // Ist es korrekt, dass vvdAuto[0][0] = 3.2 und vvdAuto[0][1] = 3.7 und vvdAuto[1][0] = 4.8 ???

    Danke schonmal vorab für alle hilfreichen Kommentare.
    Grüße Fritz



  • Fritz_98 schrieb:

    Hallo zusammen,
    Gibt size wirklich die Größe der Matrix zurück oder die der ersten Dimension?

    letzteres.

    Beispiel:
    vector<vector<double>> vvdAuto;

    hier beim schließen der "template-klammern" bitte ein leerzeichen einbauen, damit der parser das nicht mit dem operator>> verwechselt.

    // jetzt sollte der Wert von auto NULL sein, oder?

    Nein. Du hast einen vector von vectoren von doubles, der hat nicht einfach irgendeinen Zahlenwert NULL. Mit der Deklaration fabrizierst du einen (leeren) vector, der double-vectoren aufnehmen kann.

    vvdAuto.resize(2); // wird nun die erste Dimension auf 2 Elemente gesetzt?

    genau das. Du hast jetzt einen vector, der zwei (leere) double-vectoren beinhaltet,

    // wenn ich nun ein Paar Werte in meine Matrix eintrage, also z.B.
    vvdAuto[0].push_back(3.2);
    vvdAuto[0].push_back(3.7);
    vvdAuto[1].push_back(4.8);
    // Auslesen der Größe der Matrix:
    vvd.Auto.size();

    Ich nehme mal an, dass der Punkt zwischen vvd und Auto ein Tippfehler ist. Da du mit vvdAuto den äußeren vector bezeichnest, gibt dir size() immernoch 2 zurück (du hast es oben ja mit resize() auf 2 gesetzt). Um die größen der inneren vectoren zu wissen, musst du sowas aufrufen:

    vvdAuto[0].size(); //gibt hier 2
    vvdAuto[1].size(); //gibt hier 1
    

    // was wäre das Ergebnis??
    // Ist es korrekt, dass vvdAuto[0][0] = 3.2 und vvdAuto[0][1] = 3.7 und vvdAuto[1][0] = 4.8 ???

    ja, ist korrekt

    Danke schonmal vorab für alle hilfreichen Kommentare.
    Grüße Fritz



  • danke pumuckl, deine Antworten haben mir echt sehr geholfen.
    Habe jetzt das Gefühl einigermaßen durchzusteigen.
    Aber eine letzte Frage bleibt:
    Wenn ich nur meine Matrix vvdAuto deklariere und sonst noch nichts mache, dann ist mein Vektor vom Vektor leer.
    Könnte man dann schon vvdAuto.size() anwenden? Wäre der Wert dann NULL?

    Danke für die Bemühungen --> hat echt schon etwas gebracht 😃



  • 0, der wert, den size zurückliefert, wäre 0.
    du könntest von beginn an auch schon angeben, wie groß die vektoren sein sollen:

    vector<vector<double> > matrix(2, vector<double>(3, 0.0));
    

    erstellt einen vector von zwei vektoren, die jeweils eine size von 3 haben und deren inhalt je 0.0 ist.


Anmelden zum Antworten