<?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[Mit new erstellten Zeiger in vector pushen?]]></title><description><![CDATA[<p>Hey!</p>
<p>Was muss ich beachten, wenn ich per new ein neues Array erzeuge (zB. map.index = new WORD[vertices];) und dann in einen std::vector packe? (mapList.push_back(map);)</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/173623/mit-new-erstellten-zeiger-in-vector-pushen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 09:32:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173623.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Feb 2007 01:05:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 01:05:08 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Was muss ich beachten, wenn ich per new ein neues Array erzeuge (zB. map.index = new WORD[vertices];) und dann in einen std::vector packe? (mapList.push_back(map);)</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230386</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 01:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 01:15:12 GMT]]></title><description><![CDATA[<p>du musst dich um die Freigabe des Speichers kümmern. Schau mal bei Boost, da findest du auch Container, die speziell für Pointer-Member ausgelegt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230387</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 18 Feb 2007 01:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 01:53:15 GMT]]></title><description><![CDATA[<p>Möchte boost vorerst nicht verwenden.</p>
<p>rüdiger schrieb:</p>
<blockquote>
<p>du musst dich um die Freigabe des Speichers kümmern.</p>
</blockquote>
<p>Wie mache ich das?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230398</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 01:53:15 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 04:28:48 GMT]]></title><description><![CDATA[<p>Wenn du Speicher mit <em>new</em> anforderst, gibst Du ihn mit <em>delete</em> wieder frei. Bei <em>new ... [ ... ]</em> mit <em>delete[ ]</em>.</p>
<p>zb:</p>
<pre><code class="language-cpp">int main( ) {

    int *number = new int;

    // ...

    delete number;

    // aber:

    int *numbers = new int[ 10 ];

    // ...

    delete [ ] numbers;
}
</code></pre>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230408</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 18 Feb 2007 04:28:48 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 07:07:46 GMT]]></title><description><![CDATA[<p>Wenn das vertices auf Grafik deutet, dann solltest du vorher erst mal die Grundlagen von C++ lernen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230413</guid><dc:creator><![CDATA[mnop]]></dc:creator><pubDate>Sun, 18 Feb 2007 07:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 08:09:29 GMT]]></title><description><![CDATA[<p>Das heißt, ich müsste dann für jedes Element &quot;delete [] mapList[x].index;&quot; schreiben?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230420</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 08:09:29 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 12:31:05 GMT]]></title><description><![CDATA[<p>ma ... du musst halt wenn bsw dein std::vector in einer Klasse ist, im Destruktor den Kompletten Vektor durchgehen. Jedes Item erstmal selbst löschen ... dann die clear Funktion von der std::vector Klasse aufrufen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230550</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 18 Feb 2007 12:31:05 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 13:38:24 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>[...] dann die clear Funktion von der std::vector Klasse aufrufen ...</p>
</blockquote>
<p>Ist aber nicht unbedingt nötig <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>Also <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11030">@ceplusplus</a>, hier mal ein Beispiel:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

class CFoo
{
  // ...
};

typedef std::vector&lt;CFoo*&gt; CFooVector;

// ...

CFooVector cFoos;
CFoo* pNew;

// mit 10 Elementen füllen:
for(int i = 1; i &lt;= 10; i++)
{
  pNew = new CFoo(/*evtl. Parameter*/);
  cFoos.push_back(pNew);
}

// ... Damit arbeiten ...

// Den Speicher der Elemetne auf dem Heap wieder freigeben, der Rest sollte vom std::vector-Destruktor erledigt werden:
for(int i = 0; i &lt; cFoos.size(); i++)
   delete cFoos[i];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1230593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230593</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 18 Feb 2007 13:38:24 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 14:15:58 GMT]]></title><description><![CDATA[<p>Danke! Es sieht aber so aus:</p>
<pre><code class="language-cpp">struct Map
{
    // ...
	struct Vertex
	{
		float x, y, z;
	};

	Vertex* vertex;
    // ...
};
</code></pre>
<pre><code class="language-cpp">// ...
Map map;
map.vertex = new Map::Vertex[24];
// ...
</code></pre>
<pre><code class="language-cpp">// ...
std::vector&lt;Map&gt; mapList;
// ...
mapList.push_back(map);
// ...
</code></pre>
<p>Also muss ich dann</p>
<p>delete [] mapList[x].vertex;</p>
<p>schreiben?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230616</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 14:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 14:31:33 GMT]]></title><description><![CDATA[<p>Mach lieber so:</p>
<pre><code class="language-cpp">struct Map
{
    // ...
    Map( size_t size )
    {
        vertex = new Vertex[size];
    }
    ~Map()
    {
        delete[] vertex;
    }        
    struct Vertex
    {
        float x, y, z;
    };
    Vertex* vertex;
    // ...
};
</code></pre>
<p>Dann kümmert sich map selbst um den Speicher und du kannst den vector ganz normal benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230625</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Sun, 18 Feb 2007 14:31:33 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 14:38:38 GMT]]></title><description><![CDATA[<p>Interessant. Danke.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230633</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 14:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 14:59:56 GMT]]></title><description><![CDATA[<p>Google mal nach RAII ( Resource Acquisition Is Initialization )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230643</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Sun, 18 Feb 2007 14:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 18:33:14 GMT]]></title><description><![CDATA[<p>THX 1138 schrieb:</p>
<blockquote>
<p>Mach lieber so:</p>
<pre><code class="language-cpp">struct Map
{
    // ...
    Map( size_t size )
    {
        vertex = new Vertex[size];
    }
    ~Map()
    {
        delete[] vertex;
    }        
    struct Vertex
    {
        float x, y, z;
    };
    Vertex* vertex;
    // ...
};
</code></pre>
<p>Dann kümmert sich map selbst um den Speicher und du kannst den vector ganz normal benutzen.</p>
</blockquote>
<p>Als erster Schritt schon mal 'ne gute Sache. Sauber wird es, wenn man die sogenannte 'Regel der drei' befolgt, die da lautet: &quot;Falls ein nicht trivialer Destruktor (oder Zuweisung-Operator oder Kopier-Konstruktor) in der Klasse auftaucht, so muss man auch die anderen beiden implementieren.&quot;</p>
<p>Für den Anfang würde es auch reichen, diese einfach 'lahm zu legen' - inden man sie private macht.</p>
<pre><code class="language-cpp">struct Map
{
    // ...
    explicit Map( size_t size ) // explicit verhindert implizite Konvertierung
        : vertex( new Vertex[size] ) // Initialisierungslisten verwenden
    {}
    ~Map()
    {
        delete[] vertex;
    }        
    struct Vertex
    {
        float x, y, z;
    };
private:  // 'vertex' bessser auch private machen
    Vertex* vertex;
    // ...
private:
    Map( const Map&amp; );
    Map&amp; operator=( const Map&amp; );
};
</code></pre>
<p>.. falls Dein Code anschließend nicht mehr compiliert, hat Dich diese Konstruktion vor einem bösen Laufzeitfehler bewart.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230779</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 18 Feb 2007 18:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 18:41:43 GMT]]></title><description><![CDATA[<p>&quot;Falls ein nicht trivialer Destruktor (oder Zuweisung-Operator oder Kopier-Konstruktor) in der Klasse auftaucht, so muss man auch die anderen beiden implementieren.&quot;</p>
<p>Verstehe ich nicht.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230782</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 18:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 18:44:56 GMT]]></title><description><![CDATA[<p>Eventuell meint er Konstruktor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230783</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Sun, 18 Feb 2007 18:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 18:52:59 GMT]]></title><description><![CDATA[<p>Nein, tut er glaub ich nicht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1230791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230791</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sun, 18 Feb 2007 18:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 18:59:11 GMT]]></title><description><![CDATA[<p>Knuddlbaer schrieb:</p>
<blockquote>
<p>Eventuell meint er Konstruktor</p>
</blockquote>
<p>Nein, er meint Destruktor.<br />
Ein Destruktor gilt als nicht trivial, wenn er z.B. eine delete enthält oder auch einen anderen Aufruf, der eine Ressource gleich welcher Art wieder freigibt.</p>
<p>Beim (automatischen) Kopieren eines Objekt mit Zeiger (hier vertex) wird natürlich nur der Zeiger kopiert, wird jetzt eines der beiden Objekte, also die Kopie oder das Original gelöscht, so wird sein Konstruktor aufgerufen und die Ressource freigegeben. Das andere Objekt läuft dann mit einem Zeiger herum der nicht mehr gültig ist und spätestens beim Löschen des Zweiten Objekts kracht es dann.</p>
<p>Mehr dazu wenn man <a href="http://www.google.de/search?q=Rule+of+three+c%2B%2B" rel="nofollow">'rule of three c++' bei google</a> eingibt. Unter anderen ist es <a href="http://www-pu.informatik.uni-tuebingen.de/oopl-0506/material/cpp2-4.pdf" rel="nofollow">hier</a> ganz gut beschrieben. In deutsch gibt's das auch <a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=BigThree#Answ" rel="nofollow">hier</a></p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230795</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 18 Feb 2007 18:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 19:07:41 GMT]]></title><description><![CDATA[<p>ceplusplus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct Map
{
    // ...
	struct Vertex
	{
		float x, y, z;
	};

	Vertex* vertex;
    // ...
};
</code></pre>
<pre><code class="language-cpp">// ...
Map map;
map.vertex = new Map::Vertex[24];
// ...
</code></pre>
<pre><code class="language-cpp">// ...
std::vector&lt;Map&gt; mapList;
// ...
mapList.push_back(map);
// ...
</code></pre>
</blockquote>
<p>Allerdings schreibe ich nach push_back():</p>
<p>delete [] map.vertex;</p>
<p>Trotzdem arbeite ich dann wie gewohnt mit dem Objekt im Vektor.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230799</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 19:07:41 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 19:13:38 GMT]]></title><description><![CDATA[<p>ceplusplus schrieb:</p>
<blockquote>
<p>ceplusplus schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::vector&lt;Map&gt; mapList;
// ...
mapList.push_back(map);
// ...
</code></pre>
</blockquote>
<p>Allerdings schreibe ich nach push_back():</p>
<p>delete [] map.vertex;</p>
<p>Trotzdem arbeite ich dann wie gewohnt mit dem Objekt im Vektor.</p>
</blockquote>
<p>Ja, da haben wir es ja schon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Dringender Tipp: Füge einen Kopier- und einen Zuweisungs-Operator für Map hinzu, in Deinem Fall public und wenn Du nicht weist wie das geht, so frag' noch mal nach. Ich gehe jetzt Fernsehen schauen - aber die anderen können Dir auch helfen.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230801</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 18 Feb 2007 19:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 21:08:12 GMT]]></title><description><![CDATA[<p>Kopierkonstruktor ok für meinen Fall. Zuweisungsoperator ist daweil nicht dringend nötig?!</p>
<p>Aber warum funktioniert es eigentlich auch ohne dem? Der Zeiger des Objekts zeigt auf ein array. Wenn man nun push_back() aufruft, wird das Objekt also kopiert... und somit auch der Zeiger. Der zeigt dann eigentlich auf die alte Adresse, die aber von delete schon wieder freigegeben wurde.</p>
<p>Warum sind die Daten dann immer noch da?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230814</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 21:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 22:32:39 GMT]]></title><description><![CDATA[<p>ceplusplus schrieb:</p>
<blockquote>
<p>Warum sind die Daten dann immer noch da?</p>
</blockquote>
<p>wahrscheinlich weil bis dahin niemand in den Speicher hineingeschrieben hat. Aber was nicht ist, kann noch kommen. Ist auch eine Frage Deiner verwendeten Umgebung. Das VisualStudio z.B. überschreibt freigegebenen Speicher im Debug-Mode und es erkennt zweimal freigegebenen Speicher als Fehler; das scheint bei Dir nicht der Fall zu sein.</p>
<p>Wenn ich's so recht überlege gäbe es für Dich eine sehr einfache Lösung. Nutze einfach einen std::vector um die Vertex zu speichern.</p>
<pre><code class="language-cpp">struct Map
{
    struct Vertex
    {
        float x, y, z;
    };

    explicit Map( size_t size )
        : vertex( size ) // legt 'size' Vertex-Objekte an
    {}

    std::vector&lt; Vertex &gt; vertex;
};
</code></pre>
<p>und das war's schon. Destruktor, Kopie-Konstruktor und Zuweisung-Operator von Map macht alles der vector und der Compiler - und Du musst Dich um nichts mehr kümmern. Ansonsten sollte sich Dein Code dadurch nicht wesentlich verändern - wenn überhaupt, so wird er einfacher.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230830</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 18 Feb 2007 22:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Sun, 18 Feb 2007 23:31:19 GMT]]></title><description><![CDATA[<p>Okay danke. Wenn das performant ist. Ist ein Maploader, da wird schon mal ordentlich &quot;gepusht&quot;.</p>
<p>MfG</p>
<p>EDIT:<br />
Wozu &quot; : vertex( size ) // legt 'size' Vertex-Objekte an &quot; ? Verstehe ich nicht. Der std::vector wird doch die Vertexobjekte speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230848</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 18 Feb 2007 23:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Mon, 19 Feb 2007 06:51:55 GMT]]></title><description><![CDATA[<p>Damit wird ein Vector mit der vorgegebenen Größe erstellt. Wenn du also von vorneherein weißt, wie groß dein Array wird, kannst du dir damit unnötige Kopieroperationen speichern. Denn wenn ein Vector seine Kapazitätsgrenze erreicht und noch ein Element eingefügt wird, muss der Inhalt des Vectors in ein neues Array kopiert werden.</p>
<p>Dadurch erhälst du nun zwei Möglichkeiten:</p>
<pre><code class="language-cpp">//1.
Map map1;

//2.
Map map2(10);
</code></pre>
<p>Damit hast du mit map1 ein Objekt, bei dem ein Vector enthalten ist, der relativ früh (wahrscheinlich nach dem 1. Einfügen) seine Größe ändern muss, d.h. auch die alten Daten kopieren. Während der Vector in map2 erst nach 10 Einfügeoperationen seine Größe ändern muss.</p>
<p>Edit: Fast vergessen: für die 1. Möglichkeit, musst du aber noch den &quot;normalen&quot; Konstruktor explizit einfügen, weil du einen anderen bereits definiert hast. D.h.:</p>
<pre><code class="language-cpp">Map()
{ }
</code></pre>
<p>Der tut zwar nichts, aber sonst fällt die Erstellung von map1 beim kompilieren fehl.<br />
[/edit]</p>
<p>Siehe:<br />
<a href="http://www.cppreference.com/cppvector/vector_constructors.html" rel="nofollow">http://www.cppreference.com/cppvector/vector_constructors.html</a></p>
<p>Und:</p>
<blockquote>
<p>[2] Memory will be reallocated automatically if more than capacity() - size() elements are inserted into the vector. Reallocation does not change size(), nor does it change the values of any elements of the vector. It does, however, increase capacity(), and it invalidates [5] any iterators that point into the vector.</p>
<p>[3] When it is necessary to increase capacity(), vector usually increases it by a factor of two. It is crucial that the amount of growth is proportional to the current capacity(), rather than a fixed constant: in the former case inserting a series of elements into a vector is a linear time operation, and in the latter case it is quadratic.</p>
<p>[4] Reserve() causes a reallocation manually. The main reason for using reserve() is efficiency: if you know the capacity to which your vector must eventually grow, then it is usually more efficient to allocate that memory all at once rather than relying on the automatic reallocation scheme. The other reason for using reserve() is so that you can control the invalidation of iterators. [5]</p>
</blockquote>
<p>Von <a href="http://www.sgi.com/tech/stl/Vector.html" rel="nofollow">http://www.sgi.com/tech/stl/Vector.html</a> . Eine Beispielhafte Implementation. Die Verdoppelung der Kapazität ist aber nicht bei jeder Vectorimplementation gegeben, aber sehr verbreitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1230878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1230878</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Mon, 19 Feb 2007 06:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Mon, 19 Feb 2007 12:22:59 GMT]]></title><description><![CDATA[<p>Aber ist push_back() performant genug? Eine einfache Zuweisung ist doch viel schneller, oder? Es kann hier schon mal um paar Tausend vertices gehen.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231127</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Mon, 19 Feb 2007 12:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Mon, 19 Feb 2007 12:36:39 GMT]]></title><description><![CDATA[<p>Für push_back() ist im Standard festgelegt, daß es im Mittel konstante Laufzeit haben <strong>muß</strong> - besser wirst auch du das nicht hinbekommen (und solange der vector genug Kapazität übrig hat, wird sich push_back() auf eine Zuweisung und ein Inkrement beschränken).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231135</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 19 Feb 2007 12:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to Mit new erstellten Zeiger in vector pushen? on Mon, 19 Feb 2007 14:08:26 GMT]]></title><description><![CDATA[<p>Mhm...</p>
<pre><code class="language-cpp">struct Map 
{ 
    struct Vertex 
    { 
        float x, y, z; 
    }; 

    explicit Map( size_t size ) 
        : vertex( size )
    {} 

    std::vector&lt; Vertex &gt; vertex; 
};
</code></pre>
<p>Im Elementinitialisierer ist also das vector- &quot;vertex&quot; Objekt gemeint?<br />
Würde dann</p>
<p>&quot; : vertex (2) &quot;</p>
<p>dasselbe wie</p>
<p>&quot; push_back();<br />
push_back(); &quot;</p>
<p>bedeuten? Also es wird nichts eingefügt, aber der Platz wird schon mal reserviert? Und bedeutet das dann, dass wenn ich vorher zB &quot; : vertex (100) &quot; schreibe, dass ich dann bis zu 100x push_back() schreiben kann, ohne dass das array vergrößert werden muss/wird?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1231234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1231234</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Mon, 19 Feb 2007 14:08:26 GMT</pubDate></item></channel></rss>