<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Vectoren in Liste speichern]]></title><description><![CDATA[<p>Hallo!<br />
Ist es möglich, Objekte, die einen STL-Vector enthalten in einer STL-Liste<br />
zu speichern?<br />
Die Grösse des Vectors wird aber erst zur Laufzeit ermittelt, ist aber<br />
dann für alle Objekte, die gespeichert werden sollen, gleich.<br />
Die Liste wird auf dem Heap angelegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178080/vectoren-in-liste-speichern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 17:11:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178080.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Apr 2007 09:28:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 09:33:04 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ist es möglich, Objekte, die einen STL-Vector enthalten in einer STL-Liste<br />
zu speichern?<br />
Die Grösse des Vectors wird aber erst zur Laufzeit ermittelt, ist aber<br />
dann für alle Objekte, die gespeichert werden sollen, gleich.<br />
Die Liste wird auf dem Heap angelegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261058</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 07 Apr 2007 09:33:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 09:41:43 GMT]]></title><description><![CDATA[<p>Hallo,<br />
natürlich ist das möglich. Deine Objekte müssen lediglich die &quot;Assignable&quot;-Eigenschaft erfüllen, konkret für list bedeutet dass, das sie kopierbar sein müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261065</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sat, 07 Apr 2007 09:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 10:04:47 GMT]]></title><description><![CDATA[<p>Ich hab das so realisieren wollen:<br />
Das zu speichernde Objekt wird auf dem Heap angelegt.<br />
Der dereferenzierte Zeiger wird in der Liste gespeichert, also das Objekt als<br />
Wert.<br />
Der Speicher des Objekts wird freigegeben.<br />
Dann wiederholt sich das ganze für das nächste Objekt.</p>
<p>Muss ich dann trotzdem einen Kopierkonstuktor schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261078</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 07 Apr 2007 10:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 10:12:28 GMT]]></title><description><![CDATA[<p>Warum kompliziert wenn´s auch einfach geht?</p>
<p>Du willst das so machen:</p>
<pre><code class="language-cpp">// A sei eine Klasse
vector&lt; A &gt; v;
A* pA = new A();
v.push_back(*pA)
delete pA;
</code></pre>
<p>Warum geht es nicht so:</p>
<pre><code class="language-cpp">v.push_back(A());
</code></pre>
<p>?</p>
<p>// edit:<br />
Zur Frage: Ja. Ein dereferenzierter Pointer ist das Objekt selbst. Also brauchst du einen Copy-Constructor. Allerdings musst du den nur selbst schreiben wenn du mit dynmaischem Speicher in der Klasse arbeitest.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261080</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 07 Apr 2007 10:12:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 10:32:10 GMT]]></title><description><![CDATA[<p>Nee, anders:</p>
<p>Das zu speichernde Objekt enhält 2 Strings und einen Vector von Strings.<br />
Die Grösse des Vectors wird erst zur Laufzeit ermittelt, bleibt aber dann<br />
für alle Objekte gleich.<br />
Das Hauptprogramm ruft eine Funktion auf, die ein solches Objekt auf dem<br />
Heap erzeugt, und einen Zeiger auf das Objekt zurückgibt.<br />
Das Hauptprogramm dereferenziert den Zeiger und Speichert das Objekt als<br />
Wert in der Liste. Dann löscht das Hauptprogramm den Zeiger.<br />
Dann ruft das Hauptprogramm die Funktion erneut auf, und es folgt das<br />
nächste Objekt.</p>
<pre><code class="language-cpp">int main()
{
int NumberOfEntries = 0;
list&lt;cConfigEntry&gt;* Configuration = new list&lt;cConfigEntry&gt;;

cConfigEntry *ConfigEntry = FindEntries(TempLine);

Configuration-&gt;push_back(*ConfigEntry);
NumberOfEntries++;
delete ConfigEntry;
}
</code></pre>
<p>cConfigEntry ist die Klasse, von der Objekte gespeichert werden sollen.<br />
Die Funktion cConfigEntry::FindEntries liefert den Zeiger auf das Objekt.<br />
In der Liste ConfigEntry soll das Objekt nun gespeichert werden.<br />
NumberOfEntries soll die Anzahl der Einträge zählen.<br />
Danach wird das Objekt gelöscht.</p>
<p>Ich hab das ganze jetzt nur mal in ein Hauptprogramm gepackt.<br />
Eigentlich ist es eine weitere Klasse, die ein File ausliest, bis eof<br />
erreicht ist. Jede Zeile wird an das dynamische Objekt aus cConfigEntry<br />
übergeben.<br />
In der Klasse cConfigEntry wird das Objekt anhand der übergebenen Zeile<br />
zusammengebaut.<br />
Das sind 2 Strings und ein String-Vector.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261093</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 07 Apr 2007 10:32:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 10:45:10 GMT]]></title><description><![CDATA[<p>Nur das Objekt selber ist dynamisch.<br />
Die beiden Strings und der Vector nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261101</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 07 Apr 2007 10:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 10:50:48 GMT]]></title><description><![CDATA[<p>Wenn in cConfigEntry nur std::string, std::vector und POD (also int, double, ...) als Daten verwendest, brauchst du keinen Copy-Constructor schreiben. Dann reicht auch der vom Kompiler aus.</p>
<p>Aber was funktioniert an deiner Lösung denn jetzt nicht?</p>
<p>// edit: warum ist die list dynmaisch angelegt?</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261102</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 07 Apr 2007 10:50:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 11:01:15 GMT]]></title><description><![CDATA[<p>Ich bekomme die Warnung, dass die Variable Configuration nicht verwendet<br />
wird. Ich hab sie als privaten Member der Klasse deklariert.<br />
Also so im privaten Abschnitt der Klasse:</p>
<pre><code class="language-cpp">std::list&lt;cConfigEntry&gt;* Configuration;
</code></pre>
<p>und dann so im Konstruktor implementiert:</p>
<pre><code class="language-cpp">cConfigFile::cConfigFile(FType _FileType, string _FilePath, unsigned _NumberOfValues, string _Separator) : FileType(_FileType), FilePath(_FilePath), NumberOfValues(_NumberOfValues), Separator(_Separator)
{
	list&lt;cConfigEntry&gt;* Configuration = new list&lt;cConfigEntry&gt;;
}
</code></pre>
<p>Der Standardkonstruktor ist leer und privat, da eine Parameterübergabe<br />
erfolgen muss.<br />
Zuerst erhalte ich o. g. Warnung, aber</p>
<pre><code class="language-cpp">Configuration-&gt;push_back(*ConfigEntry);
</code></pre>
<p>in einer Klassenmethode liefert keinen Fehler.<br />
Und auch das</p>
<pre><code class="language-cpp">delete Configuration;
</code></pre>
<p>im Destruktor liefert keinen Fehler.<br />
Die Liste will ich dynamisch anlegen, weil sie unter Umständen einige<br />
hundert Objekte speichern muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261110</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 07 Apr 2007 11:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 11:13:29 GMT]]></title><description><![CDATA[<p>Ich glaub, du hast da was falsch verstanden. Das list-Objekt speicherst du auf dem Stack, die dynamische Speicherung der Objekte übernimmt die Liste für dich.</p>
<p>Sehr kompliziert machst du das alles...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261117</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 07 Apr 2007 11:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 11:36:26 GMT]]></title><description><![CDATA[<p>Gut, also jetzt mal kurz ne Info:</p>
<p>std::list speichert seine Daten auf dem Heap. Nur ein kleiner Teil von std::list ist auf dem Stack. Die Größe dieses Teils müsstest du mit dem sizeof()-Operator ermitteln können. (eben überprüft: bei mir sind das 24 Byte)<br />
Es ist also egal wie viele Elemente du anlegst, auf dem Stack bleibt die Größe des Objekts konstant.</p>
<p>und hier:</p>
<pre><code class="language-cpp">{
    list&lt;cConfigEntry&gt;* Configuration = new list&lt;cConfigEntry&gt;;
}
</code></pre>
<p>legst du einen temporären Pointer an, forderst neuen Speicher an und am Ende des Konstruktors wird der Pointer gelöscht -&gt; Speicherleck</p>
<p>So müsste es heißen:</p>
<pre><code class="language-cpp">{
    Configuration = new list&lt;cConfigEntry&gt;;
}
</code></pre>
<p>Achja, der Sinn von Container-Klassen(vector, list, deque, ...) ist es die Speicherverwaltung (new, delete) zu kapseln. Der Anwender muss sich um solche Dinge nicht mehr kümmern.</p>
<p>Deshalb scheint deine Benutzung dieser Klassen wenig sinnvoll.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261137</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 07 Apr 2007 11:36:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 12:31:23 GMT]]></title><description><![CDATA[<p>Danke euch!<br />
Mit der Liste auf dem Stack geht's jetzt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261158</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 07 Apr 2007 12:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 13:11:42 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Deine Objekte müssen lediglich die &quot;Assignable&quot;-Eigenschaft erfüllen, konkret für list bedeutet dass, das sie kopierbar sein müssen.</p>
</blockquote>
<p>Heißt die &quot;Assignable&quot;-Eigenschaft immer, dass Sie kopierbar sein müssen?</p>
<p>Viele Grüße,<br />
Assignable</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261172</guid><dc:creator><![CDATA[Assignable]]></dc:creator><pubDate>Sat, 07 Apr 2007 13:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Vectoren in Liste speichern on Sat, 07 Apr 2007 15:29:16 GMT]]></title><description><![CDATA[<p>Assignable schrieb:</p>
<blockquote>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Deine Objekte müssen lediglich die &quot;Assignable&quot;-Eigenschaft erfüllen, konkret für list bedeutet dass, das sie kopierbar sein müssen.</p>
</blockquote>
<p>Heißt die &quot;Assignable&quot;-Eigenschaft immer, dass Sie kopierbar sein müssen?</p>
</blockquote>
<p>Grundsätzlich heißt das, dass Objekte kopier- und zuweisbar sein müssen. Zuweisungen werden aber nur unter bestimmten nötig, deshalb kommt man häufig auch ohne diese Eigenschaft davon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261228</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sat, 07 Apr 2007 15:29:16 GMT</pubDate></item></channel></rss>