<?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[Listenelemente wissen nicht zu welcher Liste sie gehören!]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine Liste nach folgendem Prinzip realisiert. (sämtliche listeneinträge müssen von listLink abgeleitet sein.)</p>
<pre><code class="language-cpp">class listLink
{
  listLink* prev; //Vorgänger
  listLink* next; //Nachfolger
};
</code></pre>
<pre><code class="language-cpp">template&lt;class T&gt;
class list_t
{
   T* vFirst;
   T* vLast;

   unsigned vCount;

public:
   void append(T* what, T* where);
   void remove(T* what);
   ...
   ...
   ...
};
</code></pre>
<p>Nun das Problem:</p>
<pre><code class="language-cpp">list_t&lt;eineTolleKlasse_t&gt; eineListe;
   eineListe.remove(einZeiger);
</code></pre>
<p>Die liste arbeitet natürlich mit den zeigern vPrev und vNext. Wenn einZeiger in wirklichkeit gar nicht in list drinnen ist, dann gibt es natürlich Probleme. Bekommt nun jedes Element einen Zeiger auf seine Liste ist der <strong>Speicherverbrauch</strong> wohl zu groß(<strong>?</strong>). (Ich habe sehr sehr große und viele Listen).</p>
<p>Kann man vielleicht eine art statische Elementvariable für eine bestimmte Gruppe von Instanzen realisieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Dankesehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207539/listenelemente-wissen-nicht-zu-welcher-liste-sie-gehören</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 07:02:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207539.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Mar 2008 21:40:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 21:40:04 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine Liste nach folgendem Prinzip realisiert. (sämtliche listeneinträge müssen von listLink abgeleitet sein.)</p>
<pre><code class="language-cpp">class listLink
{
  listLink* prev; //Vorgänger
  listLink* next; //Nachfolger
};
</code></pre>
<pre><code class="language-cpp">template&lt;class T&gt;
class list_t
{
   T* vFirst;
   T* vLast;

   unsigned vCount;

public:
   void append(T* what, T* where);
   void remove(T* what);
   ...
   ...
   ...
};
</code></pre>
<p>Nun das Problem:</p>
<pre><code class="language-cpp">list_t&lt;eineTolleKlasse_t&gt; eineListe;
   eineListe.remove(einZeiger);
</code></pre>
<p>Die liste arbeitet natürlich mit den zeigern vPrev und vNext. Wenn einZeiger in wirklichkeit gar nicht in list drinnen ist, dann gibt es natürlich Probleme. Bekommt nun jedes Element einen Zeiger auf seine Liste ist der <strong>Speicherverbrauch</strong> wohl zu groß(<strong>?</strong>). (Ich habe sehr sehr große und viele Listen).</p>
<p>Kann man vielleicht eine art statische Elementvariable für eine bestimmte Gruppe von Instanzen realisieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Dankesehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470755</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 08 Mar 2008 21:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 21:47:27 GMT]]></title><description><![CDATA[<p>Pigeon schrieb:</p>
<blockquote>
<p>Die liste arbeitet natürlich mit den zeigern vPrev und vNext. Wenn einZeiger in wirklichkeit gar nicht in list drinnen ist, dann gibt es natürlich Probleme.</p>
</blockquote>
<p>Du musst eindeutig festlegen, wie die Zeiger eines Elements gesetzt sind, das sich in einer Liste oder nicht in einer Liste befindet. Dann sollte es keine Probleme geben. Aber vielleicht habe ich deine Frage auch nicht richtig verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470756</guid><dc:creator><![CDATA[funky cat]]></dc:creator><pubDate>Sat, 08 Mar 2008 21:47:27 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 22:03:26 GMT]]></title><description><![CDATA[<p>Naja ich habe mehrere Listen. Sagen wir ListA und ListB. Zusätzlich habe ich das Element e23. Ich möchte jetzt irgendwie wissen zu welcher Liste das Element e23 gehört.</p>
<p><strong>ohne</strong> in jeder Liste nachzusehn (zu aufwändig)<br />
<strong>ohne</strong> den Elementen einen Zeiger auf die jeweilige Liste zu verpassen (zu großer speicherbedarf)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470771</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 08 Mar 2008 22:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 22:10:00 GMT]]></title><description><![CDATA[<p>Pigeon schrieb:</p>
<blockquote>
<p><strong>ohne</strong> in jeder Liste nachzusehn (zu aufwändig)<br />
<strong>ohne</strong> den Elementen einen Zeiger auf die jeweilige Liste zu verpassen (zu großer speicherbedarf)</p>
</blockquote>
<p>tut mir leid, aber geschenkt gibt's nichts. du wirst dir diese information entweder abspeichern müssen oder mit laufzeit dafür bezahlen es nachzuschaun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470776</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sat, 08 Mar 2008 22:10:00 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 22:12:55 GMT]]></title><description><![CDATA[<p>Wenn dir ein Zeiger zu viel Speicher verbraucht, dann benutz eine ID, z.B ein 16 Bit Wert, für die Listenzugehörigkeit. Ohne eine zusätzliche Information in den Listenelementen selber, wirst du in den Listen suchen müssen. Und das ist bei vielen, großen Listen wohl der schlechteste Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470779</guid><dc:creator><![CDATA[funky cat]]></dc:creator><pubDate>Sat, 08 Mar 2008 22:12:55 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 22:14:45 GMT]]></title><description><![CDATA[<p>aber mit eine ID muss ich doch auch mehr oder weniger lang &quot;suchen&quot; ?! Wie verwende ich die ID dann am besten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470780</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 08 Mar 2008 22:14:45 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 22:22:28 GMT]]></title><description><![CDATA[<p>Am besten du nimmst ein Array, das allen Pointer auf alle Listenköpfe speichert. Dann ist die ID einfach ein Index in das Array. Hast du z.B. weniger als 257 Listen, dann reicht für die ID ein einzelnes Byte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470785</guid><dc:creator><![CDATA[funky cat]]></dc:creator><pubDate>Sat, 08 Mar 2008 22:22:28 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 22:28:00 GMT]]></title><description><![CDATA[<p>Ich sehe den Sinn nicht wirklich das abzuspeichern. Es waere ein Logikfehler ein Element aus einer Liste zu loeschen in dem das Element nicht drinnen ist und Logikfehler schreibt immer nach assert.</p>
<p>Also einfach:</p>
<pre><code class="language-cpp">void remove(Node* node) {
  assert(contains(node));
  //...
}
</code></pre>
<p>contains kann dann ja jedesmal die komplette liste durchgehen und schauen ob node enthalten ist. stoert ja niemanden, da es nur in der debug version stattfindet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470788</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 08 Mar 2008 22:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 22:38:23 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Ich sehe den Sinn nicht wirklich das abzuspeichern. Es waere ein Logikfehler ein Element aus einer Liste zu loeschen in dem das Element nicht drinnen ist und Logikfehler schreibt immer nach assert.</p>
<p>Also einfach:</p>
<pre><code class="language-cpp">void remove(Node* node) {
  assert(contains(node));
  //...
}
</code></pre>
<p>contains kann dann ja jedesmal die komplette liste durchgehen und schauen ob node enthalten ist. stoert ja niemanden, da es nur in der debug version stattfindet.</p>
</blockquote>
<p>das ist um einiges besser als mein print-debug dass ich auskommentiere, lösche, wieder hinschreibe ... danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470796</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 08 Mar 2008 22:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sat, 08 Mar 2008 22:49:53 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Ich sehe den Sinn nicht wirklich das abzuspeichern. Es waere ein Logikfehler ein Element aus einer Liste zu loeschen in dem das Element nicht drinnen ist und Logikfehler schreibt immer nach assert.</p>
</blockquote>
<p>Sehe ich genauso.</p>
<p>Btw. wieso benutzt du nicht einfach die STL Container oder boost::ptr_container?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470800</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Sat, 08 Mar 2008 22:49:53 GMT</pubDate></item><item><title><![CDATA[Reply to Listenelemente wissen nicht zu welcher Liste sie gehören! on Sun, 09 Mar 2008 09:47:09 GMT]]></title><description><![CDATA[<p>phlox81 schrieb:</p>
<blockquote>
<p>Btw. wieso benutzt du nicht einfach die STL Container oder boost::ptr_container?</p>
</blockquote>
<p>möglicherweise weil std::list absolut unbrauchbar ist? Die angegebenen Garantien und das Interface schränken die Anwendbarkeit dermaßen ein, dass man oft gezwungen ist was eigenes zu machen.<br />
Um nur ein Beispiel zu nennen: Wozu muß man denn überhaupt wissen in welcher Liste ein Element ist um es zu löschen, wenn man schon einen iterator darauf hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1470868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1470868</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 09 Mar 2008 09:47:09 GMT</pubDate></item></channel></rss>