Vector & Array



  • der 2. Code ist compilierbar, wenn du nicht "arr[2] = c" dazuschreibst.
    wenn du ein Array mit dem Index "2" anlegst, dann erzeugst ein Variablenfeld mit 2 Membern, also nur arr[0] und arr[1],
    Weder beim Array, noch beim Vector muss eine const Variable zugewiesen werden, es werden einfach Werte kopiert, egal ob const oder nicht.
    Vector ist ein STL-Container, der eine Menge kann und dir die Speicherverwaltung weitestgehend abnimmt.

    /Edit: dem kannst du, ohne Speicher für das dritte Element, natürlich auch keins drittes zuweisen
    DAs: würde gehen:

    std::vector<int> vec(2);
    vec[0] = a;
    vec[1] = b;
    vec.push_back(c);
    


  • // 1a
    int arr [] = { 2, 3, 8 };
    // 1b
    int arr [3]; // 3 Plätze von 0-2 !!
    arr[0] = 2;
    arr[1] = 3;
    arr[2] = 8;
    
    // 2a
    std::vector<int> vec;
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(8);
    
    // 2b
    std::vector<int> vec (3);
    vec[0] = 2;
    vec[1] = 3;
    vec[2] = 8;
    

    MfG SideWinder



  • hi,

    erstmals vielen vielen Dank 🙂
    Zweitens wollte ich nur kurz über das mit dem "const" im Array eine kleine Diskussionsrunde starten.
    In meinem Buch steht ja,dass irgendetwas eine integrale oder eine konstante Variable sein müsse,kA was das ist,bin zurzeit zu faul das Buch durchzublättern,schau dann aber trodzdem 😉

    vielleicht die Länge, die muss ja konstant sein oder?
    bsp.:

    const int arr_sz = 5;
    int arr[arr_sz] = {1,2,3};
    

    .. mir fällt da gerade eine Frage ein,die mir noch nicht beantwortet wurde(^^) und zwar,wieviel Elemente -> Werte bedeuten(sorry für die schlechte formlulierung,aber anders kann ich es nicht :p ),also nen Beispiel:

    int arr[10] = { xxxxxx }; //0 - 9 Werte
    

    .. aber wie schreibe ich die hinein? Dürfen da nur 9 Ziffern insgesamt drinnen sein oder doch 10?
    Und wie ist es beim Vecotor?

    Mit freundlichen Grüßen, Osterhase xD
    P.S.: sry,ich hab das Thema schon lange nimmer durchgeblättert



  • ok meine zwei untersten Frage sind beantwortet 🙂



  • Ja, die länge eines Arrays auf dem Stack muss zur Compiletime bekannt sein:

    int x;
    cin >> x;
    
    int arr [x]; // error
    

    Es dürfen 10 Werte drinnen sein, sie erhalten automatisch die Plätze 0-9.

    MfG SideWinder



  • Du kannst das Array natürlich auch dynamisch verwalten und Speicher zur Laufzeit je nach Bedarf bereitstellen und wieder aufräumen.



  • Checker&Murckser schrieb:

    Du kannst das Array
    naürlich auch dynamisch verwalten und Speicher zur Laufzeit je nach Bedarf bereitstellen und wieder aufräumen.

    ja das hab ich versucht.. also nur mal ein kleiner Code,der nun mit vc++ 2005(Express Edition oder wie das Programm heißt^^) von einer Headerfile entrießen wurde:

    int orcatk_func(int hp_full, int pz_full, int gegner_atk[0])
    {
    
    		int gs =(pz_full <= 1 ? hp_full - gegner_atk[0] : pz_full - gegner_atk[0] && hp_full - gegner_atk[0]);
    		return gs;
    }
    

    Das Problem ist hier,dass folgende Meldung kommt:

    error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich.

    Und in der main Datei(sourcedatei/.cpp Datei) sieht es so aus:

    //0.. Ork Angriffspunkte
    //1.. Wolf Angriffspunkte
    int gegner_atk[1]; 
    int orc_hp = 200;
    gegner_atk[0] = 80;
    int wolf_hp = 40;
    gegner_atk[1] = 20;
    

    Das sollte aber schon logisch sein und nicht irgendwie verkehrt^^
    Könntet ihr mir da bitte sagen,wie ich das machen soll 😕

    Ich hab ja nähmlich nur zwei freie Plätze,nähmlich "0" und "1" 😉

    Daniel



  • :Daniel: schrieb:

    Checker&Murckser schrieb:

    Du kannst das Array
    naürlich auch dynamisch verwalten und Speicher zur Laufzeit je nach Bedarf bereitstellen und wieder aufräumen.

    ja das hab ich versucht..

    Wie hast du das versucht?

    :Daniel: schrieb:

    int orcatk_func(int hp_full, int pz_full, int gegner_atk[0])
    {
    		
    		int gs =(pz_full <= 1 ? hp_full - gegner_atk[0] : pz_full - gegner_atk[0] && hp_full - gegner_atk[0]);
    		return gs;
    }
    

    Das ist absoluter Bullshit. Was du hier schreibst ist eine Funktion und die Werte in Klammern sind die Parameter die an diese übergeben werden. Da gehört kein Array hin.
    So macht diese Funktion wieder Sinn:

    int orcatk_func (int hp_full, int pz_full, int orkangriffspunkte {
        // Hier steht der Code
    }
    

    Aufgerufen wird diese Funktion mit

    orcatk_funk (Wert1, Wert2, gegner_atk[0])
    

    nicht definiert! Du übergibst den ersten Wert deines Arrays an die Funktion und arbeitest dann innerhalb dieser mit dem Namen orkangriffspunkte.

    Alles klar?

    Gruß



  • hallo

    es geht schon,es passt alles doch warum geht es nicht mit "0"?
    so geht es auf einmal bei mir,aber ich würde "0" auch einen Wert zuweisen 😉

    int orcatk_func(int hp_full, int pz_full, int gegner_atk[1])
    {
    
    		int gs =(pz_full <= 1 ? hp_full - gegner_atk[1] : pz_full - gegner_atk[1] && hp_full - gegner_atk[1]);
    		return gs;
    }
    

    besser kann ich es nicht 😉



  • Zeig mir doch mal bitte, wie du diese Funktion aufrufst.



  • int gegner_atk[1];
    

    Du scheints Arrays noch nicht verstanden zu haben.
    Du legst ein Array mit genau einem Element an. Es existiert nur gegner_atk[0].

    Willst du zwei Elemente ( [0] und [1] ) musst du es so machen

    int gegner_atk[2];
    

    Bei der Deklaration eines Arrays gibt man die Anzahl der Element an (hier: 2). Die einzelnen Elemente spricht man mit einem Index an der von 0 bis MAX-1 geht.

    Gruß
    Don06



  • Don06 schrieb:

    int gegner_atk[1];
    

    Du scheints Arrays noch nicht verstanden zu haben.
    Du legst ein Array mit genau einem Element an. Es existiert nur gegner_atk[0].

    Willst du zwei Elemente ( [0] und [1] ) musst du es so machen

    int gegner_atk[2];
    

    Bei der Deklaration eines Arrays gibt man die Anzahl der Element an (hier: 2). Die einzelnen Elemente spricht man mit einem Index an der von 0 bis MAX-1 geht.

    Gruß
    Don06

    Danke Don06, nun weiß ich es wieder dank dir 😉
    Dankeschön 👍



  • Allerdings macht es keinen Sinn ein Array als Funktionsparameter zu deklarieren. Die Funktion ist nach wie vor Schwachsinn.



  • basti33 schrieb:

    Allerdings macht es keinen Sinn ein Array als Funktionsparameter zu deklarieren. Die Funktion ist nach wie vor Schwachsinn.

    Welcher Teil der Funktion ist bitteschön "Schwachsinn"?
    Die Logik?
    Die Parameterleiste?

    Daniel



  • Deine Funktion:

    int orcatk_func(int hp_full, int pz_full, int gegner_atk[1])
    {
    
            int gs =(pz_full <= 1 ? hp_full - gegner_atk[1] : pz_full - gegner_atk[1] && hp_full - gegner_atk[1]);
            return gs;
    }
    

    Wie man sieht enthält die Parameterliste ein Array. Ich versteh nicht so ganz, was das bezwecken soll. In die Parameterlist sollte nur ein normaler Integer und beim Aufruf übergibst du dann den Index des Arrays. Also so:

    int orcatk_func(int hp_full, int pz_full, int gegner_atk)
    {
            int gs =(pz_full <= 1 ? hp_full - gegner_atk : pz_full - gegner_atk && hp_full - gegner_atk);
            return gs;
    }
    
    int main () {
    	int Array [3] = {4,7,9};
    	orcatk_func(1,3,Array[2]);
    
    	return 0;
    }
    

    Gruß



  • Also, bei einer Funktiondeklaration gibst im Funktionskopf in den Klammern Parameter an (oder auch nicht, ist jetzt aber egal).
    Rufst du die Funktion später auf gibst du die aktuellen Parameter an. Diese werden dann in die lokalen Variablen in der Funktion kopiert. Deshalb müssen deine Variablen auch nicht die selben Namen haben.
    Ausserdem soll deine Funktion ja nur einen Angriffswert übernehmen (Ork oder Wolf? war das so?) also übergibst du der Funktion nur einen Wert, kein Array von Werten.

    Das sieht dann so aus wie basti33 gesagt hat:

    int orcatk_func (int hp_full, int pz_full, int orkangriffspunkte)
    {
        // Hier steht der Code
    }
    

    Hoffe mal da war jetzt kein Fehler drin.

    //edit: zu spät
    //edit2: Mir fällt auf das du Englisch und Deutsch gemischt gebrauchst, nicht so gut. Entscheide dich für eine Sprache (am besten Englisch).

    Gruß
    Don06


Anmelden zum Antworten