Alterbative zu Verketteter Listen?



  • Hallo!

    Ich hab mir ne klasse geschrieben mitd er ich aus deren Objekte dann ne Verkettete Liste aufbaue. So nun hat die Klasse aber jetzt schon ca. 80 Methoden da ich viele Atribute hab die ich befüllen und wieder auslesen muss. Das wird mir langsamm zu viel mit den Methoden. Nun meine Frage ich würde das ganze gern in ein Array packen nur ist da doch das Problem das ein Array im Speicher immer komplett am Stück steht und nicht wie in einer Verketteten alt dort reingepackt wird wo gerade was frei ist. Und wenn mein Array groß wird kann das zu Problemen führen oder??

    Wie kann ich das denn lösen oder gibts alternatieven? Kann ich das Array auch dynamisch anlegen??

    MFG

    Maruu



  • Du kannst das Array auch dynamisch anlegen, aber wenn ich dich richtig verstehe ist das Problem nicht die Liste, sondern dass du 2Klassen (die Liste und das eigentliche Programm) in eine Klasse gepackt hast.



  • Ne das Problem ist schon die Liste, ich bekomm eine sehr große Menge an Daten von einer Datenbank die ich zwischenspeichern muss um noch was zu verändern und Routinen drüber laufen zu lassen bevor ich sie in eine andere Datenbank schreibe.

    So und da ich ca 40 Spalten einlese sind es je eine set und eine get Methode um die jeweiligen Atribute zu lesen und zu schreiben.
    Da wäre es einfacher das ganze in ein Array zu packen und es vie Referenzen zu übergeben.

    Kannst du ein kurzes Beispiel machen wie ich ein Dynamisches Array erstelle das würde mir sehr helfen??

    MFG

    Maruu



  • Ist zwar für mehrdimensionale, aber ist ja genauso wie bei einfachen
    http://www.c-plusplus.net/forum/viewtopic.php?t=39489

    Und mir ist immernoch schleierhaft weshalb nen Array besser als ne Liste ist.
    Die Liste muss über die Daten doch _nichts_ wissen, im extremfall reicht nen void* auf ein Datensatz.
    In C++ sind natürlich Templates schöner und als Sahnehäubchen gibts in der Standardbibliothek bereits std::list und für Arrays std::vector 🙂



  • Mhhm was hat es denn mit diesen Containern auf sich?
    Um mal dieses Beispiel zu nehmen:

    #include <vector> 
    using namespace std; 
    int main() 
    { 
        const int FirstDim = 3; 
        const int SecDim = 2; 
        vector< vector<int> > My2DimArr(FirstDim); 
        for (int i = 0; i < FirstDim; i++) 
            My2DimArr[i].resize(SecDim); 
    
        My2DimArr[1][1] = 42; 
    }
    

    Seh ich das richtig das mit:

    vector< vector<int> > My2DimArr(FirstDim);
    

    Ein Vektor der Größe 3 angelegt wird und mit:

    My2DimArr[i].resize(SecDim);
    

    Der Vektor 2-Dimensional gemacht wird und zwar 2 Spalten und 3 Reihen??

    Ist dem dann egal was in ihn gespeicher wird(also jegliche Art von Datentyp oder Größe des Strings der in ihm gespeichert wird), kann ich das dann einfach wie in ein Array Speichern also mit While schleife hochlaufen lassen???

    MFG

    Maruu



  • Natürlich kannst du einfach durch die Elemente loopen (via Index), dazu sind die ja da (es gibt auch noch sog. Iteratoren, damit kann man noch viel mehr machen...), und natürlich kannst du alle Typen speichern (template!)!



  • Ok, aber jetzt nur mal zum Verständnis. Wo liegt der Unterschied zu nem Dynamischen Array, Ok die Typenunabhägigkeit aber die hab ich auch bei nem Dynamischen Array wenn ich AnsiString nehm da kann ich auch so gut wie alles reinhauen.

    MFG

    Maruu



  • Ok, aber jetzt nur mal zum Verständnis. Wo liegt der Unterschied zu nem Dynamischen Array, Ok die Typenunabhägigkeit aber die hab ich auch bei nem Dynamischen Array wenn ich AnsiString nehm da kann ich auch so gut wie alles reinhauen.

    MFG

    Maruu



  • z.B. hast du viel weniger Arbeit mit diversen Rotinen (Speicher "vergrößern", "verkleinern", etc.), dann gibt es noch die STL-Algorithmen, die über beliebige STL-Iteratoren laufen und man kann kann dank der Templates tolle Sachen machen, wie ein vector aus vectoren, die maps enthalten aus strings und vectoren... 😃
    So was in normale dynamische Arrays umzusetzten ist mühsam!


Anmelden zum Antworten