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;
};
-
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 beilist
. Und da, wie du schon sagtest, bei einer Datenbank sehr oft iteriert wird, istvector
die bessere Wahl. Einfügen und Löschen ist beimvector
auch nicht langsam, ohne Berücksichtigung der Reihenfolge geht das sogar in O(1). Wenn die Daten sortiert sein sollen, dann ist sowiesoset
besser.
Natürlich werden bei "richtigen" Datenbanken wederlist
nochvector
nochset
eingesetzt, aber das ist wieder eine andere Sache.