<?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[dynamische arrays und kopieren derselben]]></title><description><![CDATA[<p>hallo<br />
Ich habe folgendes problem. Und zwar muss ich einen array (mit anfangsgrösse 2) mit werten auffüllen. sobald der array voll ist, soll ein neuer array erzeugt werden (also mit der grösse 4), die alten werte in den neuen kopiert werden, und der alte dann schliesslich gelöscht werden. Wenn der widerum voll ist, wird ein neuer von der gröss 8 erzeugt, kopiert, der alte gelöscht usw.</p>
<p>wie muss ich das genau machen mit dem erzeugen der dynamischen arrays, dem kopieren und löschen?</p>
<p>vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197447/dynamische-arrays-und-kopieren-derselben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 07:20:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197447.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Nov 2007 15:40:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sat, 10 Nov 2007 15:40:43 GMT]]></title><description><![CDATA[<p>hallo<br />
Ich habe folgendes problem. Und zwar muss ich einen array (mit anfangsgrösse 2) mit werten auffüllen. sobald der array voll ist, soll ein neuer array erzeugt werden (also mit der grösse 4), die alten werte in den neuen kopiert werden, und der alte dann schliesslich gelöscht werden. Wenn der widerum voll ist, wird ein neuer von der gröss 8 erzeugt, kopiert, der alte gelöscht usw.</p>
<p>wie muss ich das genau machen mit dem erzeugen der dynamischen arrays, dem kopieren und löschen?</p>
<p>vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400969</guid><dc:creator><![CDATA[sergew]]></dc:creator><pubDate>Sat, 10 Nov 2007 15:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sat, 10 Nov 2007 15:48:45 GMT]]></title><description><![CDATA[<p>am besten kapselt du den ganzen kram in einer eigenen klasse. in der klasse merkst du dir die aktuelle kapazität des arrays (deine 2, 4 etc.) und die aktuelle größe. wobei die größe bei 0 beginnt und jedesmal, wenn ein item eingefügt wird um eins erhöht wird. sollte die größe die kapazität übersteigen, erzeugst du ein neues array doppelter größe (am einfachsten per new), kopierst das alte array dort hinein (memcpy) und löscht das alte array (delete).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400973</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Sat, 10 Nov 2007 15:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sat, 10 Nov 2007 15:55:49 GMT]]></title><description><![CDATA[<p>hi, danke für die rasche antwort. So halbwegs hab ichs verstanden. Noch was zum dynamischen array: Wenn ich sowas hier mache:</p>
<p>int g = 2;<br />
int *stack = new int[g];</p>
<p>was habe ich nun genau definiert? ein array mit grösse 2?</p>
<p>und wie geht das genau mit dem kopieren? kann ich nicht einfach array1 = array2; zuweisen?</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400982</guid><dc:creator><![CDATA[sergew]]></dc:creator><pubDate>Sat, 10 Nov 2007 15:55:49 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sat, 10 Nov 2007 16:37:08 GMT]]></title><description><![CDATA[<p>jup, damit hast du ein &quot;array&quot; der größe 2 definiert. array deshalb in anführungszeichen, weil stack eigentlich kein array ist. mit &quot;int *stack = new int[g]&quot; reservierst du im speicher aufeinanderfolgenden platz, groß genug, um zwei ints aufzunehmen, wobei stack auf die erste stelle zeigt. umgangssprachlich aber ein array.</p>
<p>genau das ist aber auch der grund, warum du durch zuweisung nicht das erreichst, was du möchtest. da stack &quot;nur&quot; ein pointer ist, würdest du diesen durch die zuweisung lediglich auf einen anderen speicherbereich umbiegen, der sehr wahrscheinlich einfach uninitialisierten müll enthält.</p>
<p>deshalb müssen die daten aus dem alten &quot;array&quot; noch in das neue kopiert werden. und dafür gibs die funktion memcpy.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401020</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Sat, 10 Nov 2007 16:37:08 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sat, 10 Nov 2007 17:42:28 GMT]]></title><description><![CDATA[<p>du könntest es auch so machen, das du den speicher mit calloc und realloc reservierst.<br />
du nimmst dein grundarray<br />
int *a = (int *)calloc(sizeof(int),2);<br />
und füllst dieses mit werten. sobald du am ende bist, reservierst du entw. ganz neuen speicher, oder erweiterst deinen bestehenden speicher um 2 intgroße speicherstellen.<br />
a = (int <em>)realloc(a,2</em>sizeof(int));<br />
dann wieder bis ans ende und erweitern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401056</guid><dc:creator><![CDATA[Schatten]]></dc:creator><pubDate>Sat, 10 Nov 2007 17:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sat, 10 Nov 2007 23:19:25 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>jup, damit hast du ein &quot;array&quot; der größe 2 definiert. array deshalb in anführungszeichen, weil stack eigentlich kein array ist. mit &quot;int *stack = new int[g]&quot; reservierst du im speicher aufeinanderfolgenden platz, groß genug, um zwei ints aufzunehmen, wobei stack auf die erste stelle zeigt. umgangssprachlich aber ein array.</p>
<p>genau das ist aber auch der grund, warum du durch zuweisung nicht das erreichst, was du möchtest. da stack &quot;nur&quot; ein pointer ist, würdest du diesen durch die zuweisung lediglich auf einen anderen speicherbereich umbiegen, der sehr wahrscheinlich einfach uninitialisierten müll enthält.</p>
<p>deshalb müssen die daten aus dem alten &quot;array&quot; noch in das neue kopiert werden. und dafür gibs die funktion memcpy.</p>
</blockquote>
<p>also wenn ich den array mit einer einfachen &quot;=&quot; und nachher die werte aus dem neuen array abfrage, bekomm ich teilweise die richtigen werte, und teilweise komische sachen zurück.<br />
Wie muss ich das genau mit memcpy machen? Ansonsten vielen dank für eure antworten, hat mir schon recht weitergeholfen.</p>
<p>glg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401176</guid><dc:creator><![CDATA[sergew]]></dc:creator><pubDate>Sat, 10 Nov 2007 23:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sun, 11 Nov 2007 04:57:25 GMT]]></title><description><![CDATA[<p><a href="https://www.google.de/search?&amp;q=c%2B%2B%20memcpy" rel="nofollow">Google: c++ memcpy</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401211</guid><dc:creator><![CDATA[[gg]c++ memcpy[&#x2F;gg]]]></dc:creator><pubDate>Sun, 11 Nov 2007 04:57:25 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sun, 11 Nov 2007 11:46:39 GMT]]></title><description><![CDATA[<p>langweilig sonntag. hab mal nen beispiel gebastelt.</p>
<pre><code class="language-cpp">class Container
{
    private:
        int capacity;
        int tsize;
        int *data;

        void resize()
        {
            // neuen speicher allozieren
            int *buf = new int[capacity * 2];
            // daten in den neuen speicherbereich kopieren
            memcpy(buf, data, sizeof(int) * capacity);
            // den alten speicher freigeben
            delete[] data;
            // pointer umbiegen
            data = buf;
            // capacity auf neuen wert setzen
            capacity *= 2;
        }

    public:
        Container() : capacity(2), tsize(0)
        {
            data = new int[capacity];
        }

        ~Container()
        {
            delete[] data;
        }

        int size()
        {
            return tsize;
        }

        void add(int item)
        {
            if(tsize &gt;= capacity)
                resize();
            data[tsize++] = item;
        }

        int get(int index)
        {
            return data[index];
        }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1401272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401272</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Sun, 11 Nov 2007 11:46:39 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische arrays und kopieren derselben on Sun, 11 Nov 2007 16:17:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
class dynamic_array
{
	std::size_t m_size;
	T*			m_data;

public:
	dynamic_array(std::size_t size = 0) : m_size(size), m_data(new T[size]) {}
	dynamic_array(const T* data, std::size_t size) : m_size(size), m_data(new T[size]) 
	{ std::copy(data, data + size, m_data); }
	dynamic_array(dynamic_array const&amp; rhs) : m_size(rhs.m_size), m_data(new T[rhs.m_size])
	{ std::copy(rhs.m_data, rhs.m_data + m_size, m_data); }
	dynamic_array&amp; operator=(dynamic_array const&amp; rhs) 
	{ m_size = rhs.m_size; m_data = new T[m_size]; std::copy(rhs.m_data, rhs.m_data + m_size, m_data); return *this; }
	~dynamic_array() { delete[] m_data; }

	inline std::size_t size() const { return m_size; }
	void push_back(T const&amp; data)
	{
		resize(m_size + 1);
		m_data[m_size++] = data;
	}
	void resize(std::size_t size) 
	{
		T* tmp = new T[size];
		std::copy(m_data, m_data + std::min&lt;std::size_t&gt;(size, m_size), tmp);
		delete [] m_data;
		m_data = tmp;
	}
	T const&amp; at(std::size_t index) const 
	{ if (index &gt;= m_size) throw std::out_of_range(&quot;index&quot;); return m_data[index]; }
	T&amp; at(std::size_t index) 
	{ if (index &gt;= m_size) throw std::out_of_range(&quot;index&quot;); return m_data[index]; }
};
</code></pre>
<p>ach das geht doch schnell <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /> Jetzt einmal so, dass er nur so viel Speicher holt, wie er braucht. Aja und nicht die großen 3 vergessen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Nutzen:</p>
<pre><code class="language-cpp">// entweder vorher Größe angeben
dynamic_array&lt;int&gt; data(2);
for (std::size_t i = 0; i &lt; data.size(); ++i)
    data.at(i) = i * 10;

// Einfaches Anfügen ...
data.push_back(30);

// Normalen Array kopieren:
int static_data[] = { 40, 50, 60, 70, 80 };
dynamic_array&lt;int&gt; static_to_dynamic_data(static_data, sizeof(static_data));
</code></pre>
<p>... usw ... ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1401447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1401447</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 11 Nov 2007 16:17:14 GMT</pubDate></item></channel></rss>