Daten Klasse



  • Ich möchte mal wissen wie man an besten Daten verwalten kann in C++.

    Sagen wir mal ich habe Name, Nachname, Adresse und Alter die ich speichern möchte.

    Nun mache ich die Klasse Datenbase. Soll ich nun einfach für jede Variable Speicher reservieren also

    class Datenbase
    {
    private:
    string Name;
    string Nachname;
    int Adresse;
    int Alter;
    };

    und sie dann in der main als Vector initialisieren ?

    oder soll ich schon in der Klasse mit Vectoren arbeiten?

    class Datenbase
    {
    private:
    vector<string> Name;
    vector<string> Nachname;
    vector<int> Adresse;
    vector<int> Alter;
    };


  • Mod

    Wenn Name, Nachname und Adresse untrennbar zusammen gehören, dann modellier sie auch als untrennbare Einheit.



  • also ich würd en struct machen, welches genau diese eigenschaften intus hat
    und dann in der klasse einen vector von diesem struct nehmen...

    struct Daten
    {
        string vorname;
        string nachname;
        int alter;
        // ...
    };
    
    class Datenbase
    {
        vector<Daten> daten;
    public:
        // ...
    };
    


  • Erstens würde ich die Klasse eher Database nennen, und zweitens würde ich eine std::list anstatt eines vectors nehmen.



  • Das hängt total davon ab, was für Verantwortlichkeiten die einzelnen Klassen haben sollen.

    Was ist denn eine Datenbase? Entweder Database oder Datenbasis aber so ein Denglisch ist verwirrend. Nach Daten bin ich auf Deutsch und dann denk ich bei Base an eine chemische Verbindung, die den pH-Wert einer Lösung erhöht.

    Die von dir beschriebenen Attribute scheinen zusammen einer Person zugehörig zu sein. Dann gehören sie wie von SeppJ beschrieben zusammen. Ob die Struktur jetzt aber ein struct oder ein class ist und wie man das dann wiederum weiterverwendet, liegt auf einem ganz anderen Blatt.



  • 314159265358979 schrieb:

    [...]und zweitens würde ich eine std::list anstatt eines vectors nehmen.

    Warum?



  • 314159265358979 schrieb:

    ...und zweitens würde ich eine std::list anstatt eines vectors nehmen.

    Grundsätzlich sollte man bei der Wahl des Containers immer überlegen, was die wesentlichen Zugriffe sind. Greift man sehr häufig auf die Datensätze zu, und sind Änderungen (Hinzufügen/Löschen...) eher selten, ist der vector wesentlich geeigneter als die list.

    In der Regel ist der std::vector meist eine wesentlich bessere Wahl als eine std::list, auch wenn es von den Anforderungen abhängt.



  • Wenn ich eine Datenbank habe, finden oft Anfragen statt wie das Auswählen nach bestimmten Kriterien oder eben das Entfernen. Das Durchiterieren geht in beiden Containern ungefähr gleich schnell, aber das Einfügen oder Entfernen in einer List ist wesentlich besser.



  • Das ist genau der Punkt: durch Cachingeffekte geht das Iterieren bei vector u.U. um einiges schneller als bei list . Und da, wie du schon sagtest, bei einer Datenbank sehr oft iteriert wird, ist vector die bessere Wahl. Einfügen und Löschen ist beim vector auch nicht langsam, ohne Berücksichtigung der Reihenfolge geht das sogar in O(1). Wenn die Daten sortiert sein sollen, dann ist sowieso set besser.
    Natürlich werden bei "richtigen" Datenbanken weder list noch vector noch set eingesetzt, aber das ist wieder eine andere Sache.


Anmelden zum Antworten