Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » vector

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.02.2006, 20:44 Uhr
Pler
Einer von Vielen
(Operator)


Hi,

nochmals zu vectoren:
Ich lese ja nun Werte in den Vektor ein. Das können 100 aber auch 10000 sein.

Meine Überlegung ist nun, dass es doch ziemlich uneffiktiv sein muss, wenn für jeden Wert neu Speicher geholt wird.

(In der Schule hat man ja auch so was wie

Code:
if( ( aktSize % 5 ) == 0 )
{
    p = realloc( p , aktSize + 5 );
}


geschrieben.

Ist sowas für Vektoren auch vorgesehen?
Wenn ja wie geht das?

Oder überlässt man das auch wieder dem Compilter oder gar dem Betriebsystem?

Vielen Dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.02.2006, 21:02 Uhr
virtual
Sexiest Bit alive
(Operator)


Wenn Du die Größe in etwa abschätzen kannst, dann solltest Du anfangs die Kapazität des Vectors setzen (Memberfkt. reserve())

Wenn Du das nicht machst, vergrößert der std::vector selbst seine Kapazität, dabei wird meistens die Kapazität einfach jeweils verdoppelt.

Ggf. ist es auch eine Alternative, die Collection zunächst mithilfe eines Container aufzubauen, die EinfügeOperationen in O(1) Zeit erlauben (std::list) und dann einfach die Liste in einen Vector zu kopieren.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.02.2006, 21:48 Uhr
Pler
Einer von Vielen
(Operator)


Danke.

Und reserver() in Regelmäßigen abständen aufrufen? Oder geht da der alte Inhalt verloren?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.02.2006, 00:11 Uhr
virtual
Sexiest Bit alive
(Operator)


Generell solltest Du so selten wie möglich reserve aufrufen. Denn anders als in C gibt es in C++ kein realloc, sondern im Falle einer Kapazitätserhöhung eines Vectors wird komplett neuer Speicher angelegt und für alle bereits im Vector enthaltenen Elemente der Copyconstructor aufgerufen und die Originalen Objekte werden gelöscht. Genau dieser Umstand macht Vergrößerungen eines Vectors so unangenehm.

Reserve in Regelmäßigen Abständen aufzurufen ist daher eine eher schlechte Idee. Wenn Du nicht weisst, wie viele Elemente es letztlich sein werden, dann würde ich eher einmal ein reserve machen, welches entweder Platz für die Mindestanzahl oder aber Platz für die Durchschnittlich zu erwartende Anzahl von Elementen macht. Sollte Danach noch weiterer Speicher notwendig sein, würde ich mich darauf verlassen, daß es die Vector Implementierung schon möglichst effizient regeln wird.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: