C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Speicher von vector freigeben

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Sebastian Pfützner
Guest





PostPosted: Sun Mar 13, 2005 7:56 pm    Post subject: Speicher von vector freigeben Reply with quote



Hallo,
Wenn man z.B. die folgende Variable hat:

vector<int> v;

und diesen vector dann füllt und später wieder den speicher freigeben
möchte, welche der folgenden Möglichkeiten sollte man wählen? Bzw. was
ist überhaupt der Unterschied zwischen diesen?

1. v.clear();
2. v.resize(0);
3. {vector<int>().swap(v)}

Ich möchte dabei den Speicher wirklich freigeben und nicht nur die Größe
des vectors auf 0 setzen.
Ich denke, 3. macht das, was ich will, ist imo aber ziemlich umständlich
und häßlich...
--
Sebastian Pfützner
[email]s.pfuetzner (AT) onlinehome (DOT) de[/email]
ICQ-ID: 39965036

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Christoph Rabel
Guest





PostPosted: Sun Mar 13, 2005 9:14 pm    Post subject: Re: Speicher von vector freigeben Reply with quote



Sebastian Pfützner wrote:
Quote:

und diesen vector dann füllt und später wieder den speicher freigeben
möchte, welche der folgenden Möglichkeiten sollte man wählen? Bzw. was
ist überhaupt der Unterschied zwischen diesen?

1. v.clear();

clear entfernt alle Elemente aus dem Vector, gibt aber den Speicher
nicht frei. Nur die Elemente werden zerstört.

Quote:
2. v.resize(0);

Ist das selbe wie clear.

Quote:
3. {vector<int>().swap(v)}

Ich möchte dabei den Speicher wirklich freigeben und nicht nur die Größe
des vectors auf 0 setzen.
Ich denke, 3. macht das, was ich will, ist imo aber ziemlich umständlich
und häßlich...

Ja, 3 macht was du willst. 1 & 2 löschen nur die Elemente geben aber
keinen Speicher frei.

mfg

Christoph

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Philipp Bachmann
Guest





PostPosted: Mon Mar 14, 2005 11:39 am    Post subject: Re: Speicher von vector freigeben Reply with quote



Quote:
3. {vector<int>().swap(v)}

Wie Christoph schon geschrieben hat, ist dies zuverlaessig.

Aber warum beschraenkst Du nicht einfach den Scope der Instanz auf den Abschnitt in Deiner Anwendung, wo Du sie wirklich benoetigst?
Der Swap-Trick tut - zugegebenermassen in der Tat umstaendlich - auch nichts anderes, als auszunutzen, dass der (temporaere) Vektor
deterministisch und sofort zerstoert wird. Wenn die Instanz viel laenger leben muss als ihr Inhalt (weil Du vermutlich irgendwann
sie neu fuellen willst), ist "std::vector<>" vielleicht auch der falsche Container. Je nach Interface kommen mir da z.B.
"std::deque<>" oder "std::map< std::size_t,X >" in den Sinn.

Cheers,
Philipp.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Edzard Egberts
Guest





PostPosted: Mon Mar 14, 2005 5:36 pm    Post subject: Re: Speicher von vector freigeben Reply with quote

Quote:

3. {vector<int>().swap(v)}

Ich möchte dabei den Speicher wirklich freigeben und nicht nur die
Größe des vectors auf 0 setzen.
Ich denke, 3. macht das, was ich will, ist imo aber ziemlich
umständlich und häßlich...

4. Eine Zuweisung müsste doch auch gehen, so in der Art

v= vector<int>(0);

Gruß,

Ed

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Christoph Bartoschek
Guest





PostPosted: Mon Mar 14, 2005 8:48 pm    Post subject: Re: Speicher von vector freigeben Reply with quote

Edzard Egberts wrote:

Quote:

3. {vector<int>().swap(v)}

Ich möchte dabei den Speicher wirklich freigeben und nicht nur die
Größe des vectors auf 0 setzen.
Ich denke, 3. macht das, was ich will, ist imo aber ziemlich
umständlich und häßlich...

4. Eine Zuweisung müsste doch auch gehen, so in der Art

v= vector<int>(0);


Das wird nicht funktionieren, da hier v nur die Elemente des temporären
vector zugeordnet werden, ohne dass v seinen Speicher beim Allokator
freigibt.

Christoph

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.