003
19.03.2007, 14:01 Uhr
virtual
Sexiest Bit alive (Operator)
|
Du hast die Wahl zwischen verschiedenen Containern, welcher genau der richtige ist, hängt von weiteren Randbedingungen ab, die du jetzt nicht erwähnt hast.
Mir fallen jetzt speziell std::vector, std::list und std::set ein
std::vector ist vergleichsweise beliebt, wegen seiner intuitiven Benutzungweise, die man von Arrays her kennt. Wenn du oft auf das N-te Element zurgriefen musst (RandomAccess), ist dies eine recht günstige Wahl. Allerdings hat ein vector den Nachteil, bei vermehrten Lösch/Einfügeoperationen ziemlich schlecht abzuschneiden, weil ein Vector stets darauf achten muß, daß das von ihm verwaltete Array Lückenlos ist. Dh in deinem Fall: brauchst du keinen RandonAccess, ists die falsche Wahl.
std::list ist bzgl. Einfüge/lösch Operationen nicht schlagbar, jedenfalls wenn es sich um große Listen handelt. Allerdings kannst Du die Elemente nur in sequentieller Folge ansprechen.
Finally, std::set ist bzgl Einfüge/löschoperationen langsamer als eine list, aber noch immer schneller als ein std::vector. Eine std::set bietet sich zB an, um sicher zustellen, daß keine Duplicate im Container enthalten sind.
Sind die verwalteteten Element *sehr* viele, kann es u.U. schon wieder vorteilhaft sein, einen Vektor zu verwenden und die Einfüge/Lösch operationen zu optimieren: denn wenn Du nur Pointer verwendest, ist bei std::set und std::list ist der Memoryoverhead gewaltig. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 19.03.2007 um 14:03 Uhr von virtual editiert. |