<?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[Pointers in a grid]]></title><description><![CDATA[<p>Hallo miteinander!</p>
<p>Angenommen, ich habe folgenden Code-Ausschnitt:</p>
<pre><code class="language-cpp">world::world()
{
    grid_row row_one;
    row_one.push_back(new creature(&quot;max&quot;));
    row_one.push_back(new creature(&quot;moritz&quot;));
    row_one.push_back(new creature(&quot;tim&quot;));

    grid_row row_two;
    row_two.push_back(new creature(&quot;sarah&quot;));
    row_two.push_back(new creature(&quot;bla&quot;));
    row_two.push_back(new creature(&quot;blabla&quot;));

    grid_row row_three;
    row_three.push_back(new creature(&quot;1&quot;));
    row_three.push_back(new creature(&quot;2&quot;));
    row_three.push_back(new creature(&quot;3&quot;));

    _creatures.push_back(row_one);
    _creatures.push_back(row_two);
    _creatures.push_back(row_three);

    /* Wie kann ich die Nachbarn herausfinden? (damit jede creature ihren Nachbarn kennt? */
	}
</code></pre>
<p>Ich nehme ja nicht an, dass man für jede creature den Namen des Nachbarn &quot;von Hand&quot; eigeben muss, oder?<br />
(Kann man das nicht per get_name() machen?)</p>
<p>Besten Dank im Voraus für die Vorschläge.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/283243/pointers-in-a-grid</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 18:14:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/283243.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Mar 2011 10:22:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 10:22:25 GMT]]></title><description><![CDATA[<p>Hallo miteinander!</p>
<p>Angenommen, ich habe folgenden Code-Ausschnitt:</p>
<pre><code class="language-cpp">world::world()
{
    grid_row row_one;
    row_one.push_back(new creature(&quot;max&quot;));
    row_one.push_back(new creature(&quot;moritz&quot;));
    row_one.push_back(new creature(&quot;tim&quot;));

    grid_row row_two;
    row_two.push_back(new creature(&quot;sarah&quot;));
    row_two.push_back(new creature(&quot;bla&quot;));
    row_two.push_back(new creature(&quot;blabla&quot;));

    grid_row row_three;
    row_three.push_back(new creature(&quot;1&quot;));
    row_three.push_back(new creature(&quot;2&quot;));
    row_three.push_back(new creature(&quot;3&quot;));

    _creatures.push_back(row_one);
    _creatures.push_back(row_two);
    _creatures.push_back(row_three);

    /* Wie kann ich die Nachbarn herausfinden? (damit jede creature ihren Nachbarn kennt? */
	}
</code></pre>
<p>Ich nehme ja nicht an, dass man für jede creature den Namen des Nachbarn &quot;von Hand&quot; eigeben muss, oder?<br />
(Kann man das nicht per get_name() machen?)</p>
<p>Besten Dank im Voraus für die Vorschläge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031146</guid><dc:creator><![CDATA[DanC++]]></dc:creator><pubDate>Tue, 08 Mar 2011 10:22:25 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 10:34:55 GMT]]></title><description><![CDATA[<p>Mache mal ein Beispiel wer denn ein Nachbar von wem ist, denn ich verstehe nicht auf was du hinaus willst. Ich sehe nur 3 Vectoren die in einen 4ten hineingeschoben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031151</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 08 Mar 2011 10:34:55 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 10:48:10 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Du kannst ja via Indizes zugreifen. Bei [2][2] sind die Nachbarn eben [1][2], [3][2], [2][1], [2][3]. Und? Die eingefügten Objekte selbst kennen ihre Nachbarn nicht, die müssen bei ner oberen Instanz nachfragen oder müssten die Info über nen Parameter bei der jeweiligen Funktion wissen.</p>
<p>Jedem Viech alle Nachbarn zuzuweisen ist schlecht, da du für jede Änderung alles aktualisieren musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031158</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 08 Mar 2011 10:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 10:50:40 GMT]]></title><description><![CDATA[<p>Also max steht an der Stelle (1,1), das heisst links oben. moritz ebenfalls in der ersten Reihe links in der Mitte und tim in der ersten Reihe zuunterst.</p>
<p>Also etwa so:<br />
max sarah 1<br />
moritz bla 2<br />
tim blabla 3</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031160</guid><dc:creator><![CDATA[DanC++]]></dc:creator><pubDate>Tue, 08 Mar 2011 10:50:40 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 10:51:54 GMT]]></title><description><![CDATA[<p>Ah oke. Das habe ich zuerst probiert. <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="🙂"
    /><br />
Vielen Dank! Melde mich bei Problemen nochmals.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031163</guid><dc:creator><![CDATA[DanC++]]></dc:creator><pubDate>Tue, 08 Mar 2011 10:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 11:06:03 GMT]]></title><description><![CDATA[<p>Hm. Leider funktioniert das nicht so wie gewünscht..<br />
Ich habe folgendes probiert: creature[1][1].add_neighbor(creature[1][2]);<br />
Doch dann reklamiert mein Compiler, dass ein &quot;;&quot; anstelle des Punktes vor &quot;add&quot; erwartet wird.<br />
Stimmt was bzgl. Pointern nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031174</guid><dc:creator><![CDATA[DanC++]]></dc:creator><pubDate>Tue, 08 Mar 2011 11:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 11:10:44 GMT]]></title><description><![CDATA[<p>Indizes beginnen mit 0. Aber du hast denke ich noch andere Fehler gemacht. Wie wäre es mit dem Code?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031178</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 08 Mar 2011 11:10:44 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 12:17:52 GMT]]></title><description><![CDATA[<p>Wieso creature? Ich hatte mich auf _creatures bezogen. Und da du Zeiger reinspeicherst, muss der Zugriff darauf auch via [1][1]-&gt; geschehen. Und stimme zu, dass mehr Code gut wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031214</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 08 Mar 2011 12:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 12:33:33 GMT]]></title><description><![CDATA[<p>Hey Leute!<br />
Vielen Dank für Eure Hilfe! <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="🙂"
    /><br />
Mittlerweile habe ich die beiden anderen Fehler entdeckt, die ich noch im Code hatte. Jetzt funktioniert alles wie gewünscht. <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/2031224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031224</guid><dc:creator><![CDATA[DanC++]]></dc:creator><pubDate>Tue, 08 Mar 2011 12:33:33 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 13:23:47 GMT]]></title><description><![CDATA[<p>Noch eine Frage hätte ich: Ist es korrekt, wenn ich Vektoren, die ich in &quot;grid&quot; zusammengefasst habe, in einem Destruktor nur aufrufen muss, damit die &quot;gelöscht&quot; werden?</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">test::~test()
{
   	grid; // Wird der Inhalt von grid so gelöscht?
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2031257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031257</guid><dc:creator><![CDATA[DanC++]]></dc:creator><pubDate>Tue, 08 Mar 2011 13:23:47 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 13:34:01 GMT]]></title><description><![CDATA[<p>?</p>
<p>Wo hast du denn so nen Käse her? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Was Du mit new angelegt hast, musst Du auch selbst deleten. Also kannst Du schön durch die in den inneren vector eingefügten Objekte durchiterieren und alle einzeln löschen.</p>
<p>Die vectoren selbst, die auf dem Stack liegen, werden automatisch gelöscht, wenn der dtor durchlaufen worden ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031278</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 08 Mar 2011 13:34:01 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 13:48:03 GMT]]></title><description><![CDATA[<p>Sorry, ich habe meine Frage wohl etwas &quot;inkorrekt&quot; gestellt, bzw. das Beispiel völlig falsch gewählt.<br />
Ich meinte natürlich schon, dass man es per Iteration macht.<br />
Also in etwa so:</p>
<pre><code class="language-cpp">grid::iterator row = _creatures.begin();
</code></pre>
<p>Nur: Löscht das nun schon alle meine creatures?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031287</guid><dc:creator><![CDATA[DanC++]]></dc:creator><pubDate>Tue, 08 Mar 2011 13:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 20:09:30 GMT]]></title><description><![CDATA[<p>Der Codefetzen ist genau so hilfreich wie der davor, Du musst schon mehr schreiben.</p>
<p>Was zu löschen ist, ist das, was mit new erstellt wurde. Um etwas mit new erstelltes zu löschen, muss das durch delete geschehen. Um alle mit new erstellten Objekte zu erfassen, musst Du durchiterieren.</p>
<pre><code class="language-cpp">for(iterator1 it = _creatures.begin(); it != _creatures.end(); ++it)
    for(iterator2 it2 = it-&gt;begin(); it2 != it-&gt;end(); ++it2)
        delete *it2;
</code></pre>
<p>Überdenke aber, ob Du wirklich mit new erstellte Objekte hineinschmeißen möchtest. Wieso willst Du das? Und Du kannst auch boost::ptr_vector nutzen, welches das delete automatisch übernimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031488</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 08 Mar 2011 20:09:30 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Tue, 08 Mar 2011 23:10:26 GMT]]></title><description><![CDATA[<p>Okey. Hier vielleicht trotzdem alles.<br />
Etwas funktioniert nicht so, wie gewünscht.<br />
Namentlich stimmt was mit den Pointern beim deleten nicht...</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &quot;world.hpp&quot;

world::world()
{
    grid_row row_one;
    row_one.push_back(new creature(&quot;moritz&quot;));
    row_one.push_back(new creature(&quot;max&quot;));
    row_one.push_back(new creature(&quot;tim&quot;));

    //blabla..

    _creatures.push_back(row_one);

    //blabla..

  	_creatures[0][0]-&gt;add_neighbor(_creatures[0][1]);
	//blabla..

}

world::~world()
{
    /* Hier sollten alle Ressourcen freigegeben werden. Wir haben den Tipp:            
For example, we have a std::vector that holds another std::vector holding pointers of type creature.
           We use a typedef to rename the type:

               typedef std::vector&lt;std::vector&lt;creature*&gt; &gt; grid;

           Whenever we use this type, we can now write 'grid' instead. This also works if we use iterators:

               grid::iterator row = _creatures.begin();

 */

}

void world::proceed_time()
{
    for(grid::iterator row = _creatures.begin(); row != _creatures.end(); ++row)
    {
        for(grid_row::iterator creature_iter = row-&gt;begin(); creature_iter != row-&gt;end(); ++creature_iter)
        {
            creature* a_creature = *creature_iter;
            int new_activity = rand() % 4;

            switch(new_activity)
            {
            case 0:
                a_creature-&gt;sleep();
                break;
            case 1:
                a_creature-&gt;eat();
                break;
            case 2:
                if( a_creature-&gt;get_neighbors().size() &gt; 0 )
                {
                    std::vector&lt;creature*&gt; neighbors = a_creature-&gt;get_neighbors();

                    int playmate_index = rand() % neighbors.size();
                    creature* playmate = neighbors.at(playmate_index);

                    a_creature-&gt;play_with( playmate );
                    playmate-&gt;play_with( a_creature );

                    break;
                }
            case 3:
                a_creature-&gt;clean();
                break;
            }
        }
    }
}

void world::print() const
{
    const int GRID_WIDTH = 26;

    for(grid::const_iterator row = _creatures.begin(); row != _creatures.end(); ++row)
    {
        for(grid_row::const_iterator creature_iter = row-&gt;begin(); creature_iter != row-&gt;end(); ++creature_iter)
        {
            creature* a_creature = *creature_iter;
            creature* b_creature = *++creature_iter;
            creature* c_creature = *++creature_iter;

            //blabla..
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2031552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031552</guid><dc:creator><![CDATA[DanC++]]></dc:creator><pubDate>Tue, 08 Mar 2011 23:10:26 GMT</pubDate></item><item><title><![CDATA[Reply to Pointers in a grid on Wed, 09 Mar 2011 10:07:40 GMT]]></title><description><![CDATA[<p>DanC++ schrieb:</p>
<blockquote>
<p>Okey. Hier vielleicht trotzdem alles.<br />
Etwas funktioniert nicht so, wie gewünscht.<br />
Namentlich stimmt was mit den Pointern beim deleten nicht...</p>
</blockquote>
<p>Du hast es nicht implementiert, könnte das die Unstimmigkeit sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2031664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2031664</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 09 Mar 2011 10:07:40 GMT</pubDate></item></channel></rss>