<?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[Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe ein Array auf dem Heap wie z.B. das hier:</p>
<pre><code class="language-cpp">char *meinArray = new char[10];
</code></pre>
<p>Dann brauch ich ein elftes Element. Wie soll ich das Problem am effizientisten lösen (ohne std)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280411/array-auf-heap-bei-laufzeit-vergrössen-ohne-vector-list</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 03:12:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280411.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Jan 2011 11:26:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 11:26:31 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe ein Array auf dem Heap wie z.B. das hier:</p>
<pre><code class="language-cpp">char *meinArray = new char[10];
</code></pre>
<p>Dann brauch ich ein elftes Element. Wie soll ich das Problem am effizientisten lösen (ohne std)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006835</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 11:27:29 GMT]]></title><description><![CDATA[<p>Gar nicht. Du musst ein neues Array anfordern.</p>
<p>Aber gibt es einen Grund, die STL nicht zu verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006836</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:27:29 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 11:30:16 GMT]]></title><description><![CDATA[<p>Meinst das alte freigeben und mehr reservieren (Daten in zweitem temporärem Array)?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Aber gibt es einen Grund, die STL nicht zu verwenden?</p>
</blockquote>
<p>Jop, muss auf komplett eigener Basis sein (ausser Schlüsselwörter)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006837</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:30:16 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 11:31:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;cstdio&gt;
#include &lt;iostream&gt;

int main()
{
	char *erstesArray = new char[10];

	sprintf(erstesArray, &quot;123456789&quot;);

	std::cout &lt;&lt; erstesArray &lt;&lt; std::endl;

	char *zweitesArray = new char[11];

	for (int i = 0; i &lt; 10; ++i)
	{
		zweitesArray[i] = erstesArray[i];
	}

	strcat(zweitesArray, &quot;!&quot;);

	delete[] erstesArray;

	std::cout &lt;&lt; zweitesArray &lt;&lt; std::endl;

	delete[] zweitesArray;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2006840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006840</guid><dc:creator><![CDATA[äölälöälö]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:31:49 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 11:38:06 GMT]]></title><description><![CDATA[<p>Nun müsste <code>zweitesArray</code> den Namen von <code>erstesArray</code> haben...</p>
<p>EDIT: Geht das?</p>
<pre><code class="language-cpp">char *array1 = new char[10];
char *temparray = new char[10];
for(int c = 0; c &lt; 10; c++)
{
  temparray[c] = array1[c];
}
delete[] array1;
array1 = new char[11];
for(int c = 0; c &lt; 10; c++)
{
  array1[c] = temparray[c];
}
array1[10] = '!';
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2006843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006843</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:38:06 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 11:42:57 GMT]]></title><description><![CDATA[<p>Du kannst natürlich von vornherein den Array in einer Klasse kapseln (SmartArray). Dann hast du z.B. auch den Schutz gegen Zugriffe mit falschen Indices. Innerhalb der Kapselung kannst du dann den Speicher vergrößern ohne den alten Speicher wegzuschmeißen. Im Prinzip ist programmierst du für deine Bedürfnisse den STL Vector nach. Wenn du nur char brauchst, kannst du ja die templates weglassen.</p>
<p>Gruß,<br />
Stephan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006848</guid><dc:creator><![CDATA[tarmin]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:42:57 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 11:45:42 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Nun müsste <code>zweitesArray</code> den Namen von <code>erstesArray</code> haben...</p>
<p>EDIT: Geht das?</p>
<pre><code class="language-cpp">char *array1 = new char[10];
char *temparray = new char[10];
for(int c = 0; c &lt; 10; c++)
{
  temparray[c] = array1[c];
}
delete[] array1;
array1 = new char[11];
for(int c = 0; c &lt; 10; c++)
{
  array1[c] = temparray[c];
}
array1[10] = '!';
</code></pre>
</blockquote>
<p>Ja, aber das geht auch einfacher:</p>
<pre><code class="language-cpp">int main()
{
	char *array1 = new char[10];

	char *array2 = new char[11];
	for (int i = 0; i &lt; 10; ++i)
	{
		array2[i] = array1[i];
	}

	delete[] array1;

	array1 = array2;

	array1[10] = '!';

	delete[] array1;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2006850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006850</guid><dc:creator><![CDATA[kjhkhjk]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 11:58:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

const int START_SIZE = 1;
const int END_SIZE = 2;

void GrowArray(char **a1, int n1, int n2);
void FillArray(char *a, int n, char c);

int main()
{
	char *array1 = new char[START_SIZE + 1];

	FillArray(array1, START_SIZE, '!');

	std::cout &lt;&lt; array1 &lt;&lt; std::endl;

	GrowArray(&amp;array1, START_SIZE, END_SIZE + 1);

	FillArray(array1, END_SIZE, '!');

	std::cout &lt;&lt; array1 &lt;&lt; std::endl;

	delete[] array1;

	return 0;
}

void GrowArray(char **a1, int n1, int n2)
{
	char *a2 = new char[n2];

	for (int i = 0; i &lt; n1; ++i)
	{
		a2[i] = (*a1)[i];
	}

	delete[] *a1;

	*a1 = a2;
}

void FillArray(char *a, int n, char c)
{
	for (int i = 0; i &lt; n; ++i)
	{
		a[i] = c;
	}

	a[n] = '\0';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2006854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006854</guid><dc:creator><![CDATA[kljkljk]]></dc:creator><pubDate>Sat, 15 Jan 2011 11:58:12 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 12:39:43 GMT]]></title><description><![CDATA[<p>Alle so prozedural heute? Warum nicht, wie von tarmin vorgeschlagen, als hübsche, sich selbst verwaltende Klasse? Das wäre um so vieles einfacher und sicherer in der Benutzung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006867</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 15 Jan 2011 12:39:43 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 12:44:40 GMT]]></title><description><![CDATA[<p>Das sehe ich auch so. Ist vielleicht blöd, wenn man noch keine Klassen kennt, aber ansonsten würde ich dringend zur Kapselung raten.</p>
<p>Ohne jemanden angreifen zu wollen: Die hier gezeigten Codes sind grauenhaftes C++ (unübersichtlich, mühsam in der Handhabung, sehr fehleranfällig). Am ehesten geht noch kljkljk's Version, aber auch das kann man noch einfacher lösen. <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/2006868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006868</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 Jan 2011 12:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 12:48:38 GMT]]></title><description><![CDATA[<p>Aber grundsätzlich:</p>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Dann brauch ich ein elftes Element. Wie soll ich das Problem am effizientisten lösen (ohne std)?</p>
</blockquote>
<p>Wenn es effizient sein soll, spricht etwas dagegen, es gleich wie <code>std::vector</code> zu lösen? Also vorallokieren und bei Bedarf vergrössern? Dann hat man nämlich nicht bei jedem Einfügen ein Umkopieren der ganzen Sequenz.</p>
<p>Dann hat man drei Variablen: Zeiger auf dynamisches Array, Kapazität (totale Anzahl Array-Elemente) und Grösse (Anzahl momentan benutzter Array-Elemente). Die kann man mindestens in einem <code>struct</code> zusammenfassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006870</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 15 Jan 2011 12:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 13:11:05 GMT]]></title><description><![CDATA[<p>Anbei als Hilfestellung und Verständnis ein erster Ansatz zur Kapselung des Arrays. Zu ergänzen wären Exceptionhandling beim Range-Check, Vergrößerung des Arrays etc etc.<br />
Beim Vergrößern kann man jetzt entscheiden, ob man alles umkopieren möchte, oder einen zweiten Speicher anlegt und über Index-Fallunterscheidung intern auf den entsprechenden Speicher zugreift.<br />
Gruß, Stephan</p>
<pre><code>template &lt;class T&gt;
class SmartArray {
	public:
		SmartArray(size_t len = 100) : size_(len) {
			buf_  = new T[len];
		}
		~SmartArray(void){ delete [] buf_; }
		size_t size(void) const { return size_;}
		T&amp; operator[](size_t i){
			if(in_range(i)) return buf_[i];	}
	private:
		size_t size_;
		T* buf_;
		bool in_range(size_t i) const {
			return (i&gt;=0 &amp;&amp; i&lt;size());};		
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2006879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006879</guid><dc:creator><![CDATA[tarmin]]></dc:creator><pubDate>Sat, 15 Jan 2011 13:11:05 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 13:23:21 GMT]]></title><description><![CDATA[<p>tarmin schrieb:</p>
<blockquote>
<p>Anbei als Hilfestellung<br />
...</p>
</blockquote>
<p>Ein Code-Beispiel, welches die Dreierregel verletzt, finde ich wahrscheinlich nicht so hilfreich wie Du. Außerdem sollte der Konstruktor explicit sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006884</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 15 Jan 2011 13:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to Array auf Heap bei Laufzeit vergrössen ohne Vector&#x2F;List on Sat, 15 Jan 2011 13:32:35 GMT]]></title><description><![CDATA[<blockquote>
<p>... Dreierregel ... sollte der Konstruktor explicit sein.</p>
</blockquote>
<p>Selbstverständlich! Ist natürlich richtig. Der Range-Check hat auch kein else usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006893</guid><dc:creator><![CDATA[tarmin]]></dc:creator><pubDate>Sat, 15 Jan 2011 13:32:35 GMT</pubDate></item></channel></rss>