Container Typ
-
Hallo,
folgendes problem: ich lese daten aus einer datei. jetzt gibt es einen gewissen block, der eine größe von 20 oder 24 bytes hat, die ich jedoch erst zur laufzeit erfahre. diesen block möchte ich jetzt speichern, doch wie? soll ich einen vector nehmen oder ein array nehmen mit 24 bytes ? was würdet ihr nehmen bzw. machen?danke schon mal
vario-500
-
Fest steht: die Speichergröße ist dynamisch und erst zur Laufzeit bekannt. Also schon mal ein dynamisches Array; Jetzt geht es erstmal um Fakten wie: Greife ich oft auf Elemente am Ende zu (spricht für std::list/std::deque), oder in der Mitte (std::vector)? Füge ich oft Elemente ein (wenn ja, wo)? usw.
Wie verarbeite ich die Daten (Sequentielle oder Assoziative Container)? ....
-
Nimm ein std::vector per Default - wenn Du damit Probleme hast, löse es dann.
-
vario-500: Aus Bequemlichkeit würde ich auf jeden Fall vector statt array benutzen. Für den höchst unwahrscheinlichen Fall, dass die Performance darunter leidet, kannst du immer noch tauschen. Ansonsten fällt das unter nutzlose Premature Optimization.
Hacker schrieb:
Fest steht: die Speichergröße ist dynamisch
Nein.
Greife ich oft auf Elemente am Ende zu (spricht für std::list/std::deque)
Das ist gelinde gesagt Bullshit.
-
also ich muss die daten noch parsen, dass heißt am besten wäre random acces. die größe ändern sich nicht mehr. entweder 20 oder 24 und ich muss auch nur lesen und das überall.
wäre nicht eine möglichkeit, ein dynamisches array in einen unique_ptr zu packen?Edit: oder ich bleibe beim vector, ich dachte mir nur, das wäre ein wenig zu viel des guten für die paar bytes

-
Michael E. schrieb:
Greife ich oft auf Elemente am Ende zu (spricht für std::list/std::deque)
Das ist gelinde gesagt Bullshit.
Uupsi, da hast du selbstverständlich Recht. Ich meinte
std::vector.
Edit: ACH VERDAMMT, ich meinte FÜGE ICH OFT AM ENDE ELEMENTE EIN. Ja, das spricht für einen std::vector.
Und die Speichergröße ist dynamisch, damit meinte ich dass die Größe des Speichers nicht feststeht (und damit ein std::array ausgeschlossen werden kann).
-
Oder einfach
std::array<char, 24>. Selbst wenn man die letzten 4 Bytes nicht nutzt, hat man immer noch einen Bruchteil des Overheads vonstd::vector.Andererseits muss man sich so separat abspeichern, ob der Block nun 20 oder 24 Bytes gross ist. Falls man das sowieso schon weiss, ok, sonst könnte
std::vectortatsächlich etwas bequemer sein.