eigener Stack-Versuch



  • Seikuassi schrieb:

    char * x;
    INT64 y = 0;
    while ((y < 9223372036854775807)) {
       x [y] = 'a';
       y += 1;
    };
    

    So ist das mit dynamisch wachsen nicht gemeint.
    Einfach:
    Wenn Stack voll:
    1. neuen Speicher anfordern, Größe = alte_Größe * n (n ist z.B. 2)
    2. alten Speicher in neuen kopieren
    3. alten Speicher freigeben

    Und schon wächst er.



  • Hallo nochmal,

    T0 at (unsigned long long int id,T0 var) {
    	if ((id < 0) || (id >= size)) {
    		error ("at-Funktion außerhalb des Gültigkeitsbereich.",__LINE__,"Stack.h");
    	};
    	if ((init == 0)) {
    		error ("Stack nicht initialisiert",__LINE__,"Stack.h");
    	};
    	if ((id > 0) && (id < size) && (init == 1)) {
    		return mem [id];
    	};
    };
    

    Eines der wohl wichtigsten Container-Funktion, da man jederzeit auf eine Variable auf einer beliebigen Position abfragen, aber auch zuweisen kann.

    Frage: Wie sieht die Funktion (Member) aus, wenn ich einen Wert nicht nur abfragen, sondern auch übergeben will? (wie bei deque, vector etc.)?

    Die Zuweisung soll genau so aussehen, wie bei vector etc.:

    Stack.at (2) = 5; // der Name "Stack" wird später geändert
    

    Danke im Voraus!

    MfG

    Seikuassi



  • Die Geben alle eine Referenz zurück. (T&) Und bitte, schau dir doch erst mal das std::stack Interface an und implementier das. Dann kann man dir auch mal zeigen wie das ordentlich aussieht, bei deinem Kram ist das leider schon konzeptionell zu verkorkst dafür.


  • Mod

    Da meint man, alles gesehen zu haben und dann implementiert jemand einen Stack mit Random access 😃 .@TE: Ich glaube, du solltest nochmal genauer definieren, was dein "Stack" überhaupt können soll.



  • SeppJ schrieb:

    Da meint man, alles gesehen zu haben und dann implementiert jemand einen Stack mit Random access 😃

    Du hast noch nicht in Java programmiert, oder? :p


  • Mod

    Nexus schrieb:

    SeppJ schrieb:

    Da meint man, alles gesehen zu haben und dann implementiert jemand einen Stack mit Random access 😃

    Du hast noch nicht in Java programmiert, oder? :p

    Nicht wirklich viel und das bisschen ist lange her. Mal gucken:

    Java Doku schrieb:

    public class Stack
    extends Vector

    "extends" heißt "ist ein"? Falls ja, dann weint gerade irgendwo ein Professor für abstrakte Datenstrukturen. 😞



  • Hallo SeppJ,

    Da meint man, alles gesehen zu haben und dann implementiert jemand einen Stack mit Random access 😃

    Ich zitiere noch einmal den Code-Kommentar:

    Stack.at (2) = 5; // der Name "Stack" wird später geändert
    

    Ich habe nur Stack als Namen benutzt, da ich vorhin keine Zeit mehr hatte (musste noch schnell wo hin).
    Von mir aus kann man den Namen "Container" oder "Box" verwenden.

    Ich glaube, du solltest nochmal genauer definieren, was dein "Stack" überhaupt können soll.

    Mein "Stack", "Container" oder "Box" soll eigentlich nur 3 Sachen können:

    1.: Konstruieren
    2.: Dekonstruieren
    3.: Random Access-Funktion besitzen (at ())
    4.: (dazu später mehr) statt Zahlen im at (), möchte ich wie bei map Strings als "Adressen" verwenden. Beispiel:

    Statt

    container < int > test (10,0);
    container.at (2) = 50;
    

    möchte ich

    container < int > test {
           "mein_Bezeichner" = 0,
           "mein_Bezeichner0" = 1,
           "mein_Bezeichner1" = 2;
    };
    container.at ("mein_Bezeichner") = 50;
    

    schreiben.

    Mehr Funktionen können theoretisch nicht schaden (push_back etc.).
    Jetzt denkt wahrscheinlich jeder: Warum nimmt der nicht einfach einen deque oder vector. Da hat er doch alles. 😕

    Die Antwort ist ganz einfach: Ich möchte einfach nur lernen, wie eben die STL Container grob funktionieren. 😃

    Also wie muss jetzt die at ()-Funktion aussehen, damit ich sowohl Werte zurückbekomme, als auch definieren kann?

    Danke im Voraus!

    MfG

    Seikuassi



  • Ups, kleiner Fehler!

    Statt

    container < int > test (10,0);
    test.at (2) = 50;
    

    möchte ich

    container < int > test {
           "mein_Bezeichner" = 0,
           "mein_Bezeichner0" = 1,
           "mein_Bezeichner1" = 2;
    };
    test.at ("mein_Bezeichner") = 50;
    

    schreiben.

    Wie schon gesagt: Dazu kommen wir später. Erstmal ist die at-Funktion wichtig.



  • @Seikuassi

    Du bist heslig! Du Smog.


  • Mod

    Seikuassi schrieb:

    Also wie muss jetzt die at ()-Funktion aussehen, damit ich sowohl Werte zurückbekomme, als auch definieren kann?

    cooky451 schrieb:

    Die Geben alle eine Referenz zurück. (T&) Und bitte, schau dir doch erst mal das std::stack Interface an und implementier das. Dann kann man dir auch mal zeigen wie das ordentlich aussieht, bei deinem Kram ist das leider schon konzeptionell zu verkorkst dafür.

    Am besten in einer const und einer nicht-const Version.


Anmelden zum Antworten