<?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[Verwirrung mit std::list]]></title><description><![CDATA[<p>Wieso funktioniert das:</p>
<pre><code class="language-cpp">std::list&lt;int&gt; intlist;
intlist.push_back(1);
intlist.push_back(2);
intlist.push_back(3);
intlist.pop_front();

for(std::list&lt;int&gt;::iterator i = intlist.begin(); i != intlist.end(); ++i)
{
    std::cout&lt;&lt;i&lt;&lt;std::endl; //Gibt 2 und 3 aus
}
</code></pre>
<p>Jedoch nicht das:</p>
<pre><code class="language-cpp">class Foo
{
  public:
       Foo(int i)
       {
          m_i = i;
       }

       int GetI() 
       {
          return m_i;
       }
  private:
       int m_i;
}

//...

std::list&lt;Foo&gt; foolist;
foolist.push_back(Foo(1));
foolist.push_back(Foo(2));
foolist.push_back(Foo(3));

foolist.pop_front();
for(std::list&lt;Foo&gt;::iterator i = foolist.begin(); i != foolist.end(); ++i)
{
    std::cout&lt;&lt;i-&gt;GetI()&lt;&lt;std::endl; //Stürzt ab
}
</code></pre>
<p>Ist std::list unfähig benutzerdefinierte Datentypen zu managen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218232/verwirrung-mit-std-list</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 16:26:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218232.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Jul 2008 16:18:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 18:44:12 GMT]]></title><description><![CDATA[<p>Wieso funktioniert das:</p>
<pre><code class="language-cpp">std::list&lt;int&gt; intlist;
intlist.push_back(1);
intlist.push_back(2);
intlist.push_back(3);
intlist.pop_front();

for(std::list&lt;int&gt;::iterator i = intlist.begin(); i != intlist.end(); ++i)
{
    std::cout&lt;&lt;i&lt;&lt;std::endl; //Gibt 2 und 3 aus
}
</code></pre>
<p>Jedoch nicht das:</p>
<pre><code class="language-cpp">class Foo
{
  public:
       Foo(int i)
       {
          m_i = i;
       }

       int GetI() 
       {
          return m_i;
       }
  private:
       int m_i;
}

//...

std::list&lt;Foo&gt; foolist;
foolist.push_back(Foo(1));
foolist.push_back(Foo(2));
foolist.push_back(Foo(3));

foolist.pop_front();
for(std::list&lt;Foo&gt;::iterator i = foolist.begin(); i != foolist.end(); ++i)
{
    std::cout&lt;&lt;i-&gt;GetI()&lt;&lt;std::endl; //Stürzt ab
}
</code></pre>
<p>Ist std::list unfähig benutzerdefinierte Datentypen zu managen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548956</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 17 Jul 2008 18:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 16:35:15 GMT]]></title><description><![CDATA[<p>Du greifst in der unteren Schleife auf intlist und nicht auf foolist zu. intlist ist da wahrscheinlich noch leer. Der iterator ist auch falsch. Hier sollte eigentlich ein Compilerfehler kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548963</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 17 Jul 2008 16:35:15 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 16:34:46 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for(std::list&lt;Foo&gt;::iterator i = intlist.begin(); i != intlist.end(); ++i)
</code></pre>
<p>Ich hoffe,das ist ein Tippfehler,denn in deinem Programm gibt es kein 'intlist'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548965</guid><dc:creator><![CDATA[Chewbaka]]></dc:creator><pubDate>Thu, 17 Jul 2008 16:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 18:43:48 GMT]]></title><description><![CDATA[<p>Chewbaka schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for(std::list&lt;Foo&gt;::iterator i = intlist.begin(); i != intlist.end(); ++i)
</code></pre>
<p>Ich hoffe,das ist ein Tippfehler,denn in deinem Programm gibt es kein 'intlist'.</p>
</blockquote>
<p>ja, ist jetzt rauseditiert, ahb einfach copy &amp; paste gemacht. die frage bleibt erhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549027</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 17 Jul 2008 18:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 18:47:53 GMT]]></title><description><![CDATA[<p>Bei mir geht das</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549032</guid><dc:creator><![CDATA[und was]]></dc:creator><pubDate>Thu, 17 Jul 2008 18:47:53 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 19:17:29 GMT]]></title><description><![CDATA[<p>TravisG schrieb:</p>
<blockquote>
<p>Chewbaka schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for(std::list&lt;Foo&gt;::iterator i = intlist.begin(); i != intlist.end(); ++i)
</code></pre>
<p>Ich hoffe,das ist ein Tippfehler,denn in deinem Programm gibt es kein 'intlist'.</p>
</blockquote>
<p>ja, ist jetzt rauseditiert, ahb einfach copy &amp; paste gemacht. die frage bleibt erhalten.</p>
</blockquote>
<p>Probiers doch einfach nochmal und wenns immernoch Probleme gibt bei einem konkreten Beispiel,poste bitte das genaue Beispiel. Das ist nichtmal eine Vollständige Klassendeklaration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549043</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 17 Jul 2008 19:17:29 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 20:26:01 GMT]]></title><description><![CDATA[<p>Konkretes Beispiel:</p>
<pre><code class="language-cpp">class Particle
{
public:
	Particle(); /* Creates a standard particle which has a lifetime of 1 second,
				   velocity of 1.0f and 0 friction */

	Particle(float lifetime,float velocity,float friction);
	~Particle();

	void Update();
	void Shoot(sf::Vector2f startpos, float angle);
	void SetAngle(float angle);
	bool IsAlive();

	sf::Vector2f GetPosition();
private:
	float m_lifetime; 
	float m_velocity;
	float m_angle;
	float m_friction;

	//The particle needs to be &quot;emitted&quot; (shot) before it starts to do something
	bool m_shot;

	sf::Vector2f m_position;
	sf::Clock m_lifeclock;
};
</code></pre>
<p>Implementationen sollten egal sein.</p>
<pre><code class="language-cpp">class ParticleEmitter
{
public:
	ParticleEmitter();
	~ParticleEmitter();

	void SetParticleSprite(std::string filename);
	void SetParticleSprite(sf::Sprite *spr);
	void SetParticleFriction(float friction);
	void SetShootingAngle(float angle);
	void SetPosition(sf::Vector2f pos);

	void Shoot(float angle,float velocity,float lifetime, float friction = 0.0f);
	void Update();
	void Draw();

	sf::Vector2f GetPosition();
private:
	sf::RenderWindow *m_window;
	sf::Sprite *m_sprite;
	sf::Image m_spriteimage;
	std::list&lt;Particle &gt; m_particles;
	sf::Vector2f m_position;
	float m_friction;
};
</code></pre>
<p>In der Methode &quot;Update()&quot;:</p>
<pre><code class="language-cpp">void ParticleEmitter::Update()
{
	for(std::list&lt;Particle&gt;::iterator i = m_particles.begin(); i!=m_particles.end(); ++i)
	{
		if(!i-&gt;IsAlive())
		{
			m_particles.erase(i);
		}
		else
		{
			i-&gt;Update();
		}
	}
}
</code></pre>
<p>Stürzt ab sobald ich nach dem Löschen eines Elements zum Beispiel sowas mache:</p>
<pre><code class="language-cpp">for(std::list&lt;Particle&gt;::iterator i = m_particles.begin(); i!=m_particles.end(); ++i)
	{
		m_sprite-&gt;SetPosition(i-&gt;GetPosition());
		m_window-&gt;Draw(*m_sprite);
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1549075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549075</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 17 Jul 2008 20:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 20:32:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for(std::list&lt;Particle&gt;::iterator i = m_particles.begin(); i!=m_particles.end();)
    {
        if(!i-&gt;IsAlive())
        {
            i = m_particles.erase(i);
        }
        else
        {
            i-&gt;Update();
            ++i;
        }
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1549078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549078</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 17 Jul 2008 20:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 21:52:09 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for(std::list&lt;Particle&gt;::iterator i = m_particles.begin(); i!=m_particles.end();)
    {
        if(!i-&gt;IsAlive())
        {
            i = m_particles.erase(i);
        }
        else
        {
            i-&gt;Update();
            ++i;
        }
    }
</code></pre>
</blockquote>
<p>ah, da fällts mir auf einen schlag auch wie schuppen vom hintern, oder wie das heisst. wieso bin ich nicht früher drauf gekommen?</p>
<p>edit: ich nehme an erase() gibt einen iterator aufs nächste objekt zurück?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549085</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 17 Jul 2008 21:52:09 GMT</pubDate></item><item><title><![CDATA[Reply to Verwirrung mit std::list on Thu, 17 Jul 2008 22:06:13 GMT]]></title><description><![CDATA[<p>TravisG schrieb:</p>
<blockquote>
<p>edit: ich nehme an erase() gibt einen iterator aufs nächste objekt zurück?</p>
</blockquote>
<p>Jap! An so einem Fehler hab ich auch schon mal _ewig_ gehangen. Übrigens finde ich das auch relativ unintuitiv, aber das nur am Rande.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549089</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 17 Jul 2008 22:06:13 GMT</pubDate></item></channel></rss>