<?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[[gelöst]Mehrere Array Elemente löschen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in einem Array nach Elementen x suchen und diese löschen, wie mache ich das am besten? Ich habs damit versucht einfach das Array zu kopieren und dabei den Wert zu überspringen der raus soll, aber irgendwo ist ein Fehler den ich nicht finde.</p>
<p>Array[0,1,2,3,4,5,6,7,8,9]</p>
<pre><code class="language-cpp">void ExtListe::erase(int val){

    int *tmp = new int[ _last ];
    int i;
    for(i = 0; i &lt;= _last - 1; i++){

        if( values[ i ] != val )
            tmp[ i ] = values[ i + 1 ];

        else tmp[ i ] = values[ i + 1 ];

    }

    _last  -= 1;
     delete[] values;
     values = tmp;

}
</code></pre>
<p>Die Ausgabe ansich funktioniert soweit, in meinem Beispiel hab ich versucht die 2 zu löschen, beim ausgeben der Zahlen kam dann aber die 3 doppelt vor, ich find aber einfach nicht den Logikfehler</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245180/gelöst-mehrere-array-elemente-löschen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 21:55:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245180.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Jul 2009 16:10:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 18:59:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in einem Array nach Elementen x suchen und diese löschen, wie mache ich das am besten? Ich habs damit versucht einfach das Array zu kopieren und dabei den Wert zu überspringen der raus soll, aber irgendwo ist ein Fehler den ich nicht finde.</p>
<p>Array[0,1,2,3,4,5,6,7,8,9]</p>
<pre><code class="language-cpp">void ExtListe::erase(int val){

    int *tmp = new int[ _last ];
    int i;
    for(i = 0; i &lt;= _last - 1; i++){

        if( values[ i ] != val )
            tmp[ i ] = values[ i + 1 ];

        else tmp[ i ] = values[ i + 1 ];

    }

    _last  -= 1;
     delete[] values;
     values = tmp;

}
</code></pre>
<p>Die Ausgabe ansich funktioniert soweit, in meinem Beispiel hab ich versucht die 2 zu löschen, beim ausgeben der Zahlen kam dann aber die 3 doppelt vor, ich find aber einfach nicht den Logikfehler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740528</guid><dc:creator><![CDATA[codyjack]]></dc:creator><pubDate>Fri, 10 Jul 2009 18:59:06 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 16:30:09 GMT]]></title><description><![CDATA[<p>So geht's:</p>
<pre><code class="language-cpp">void ExtListe::erase( int val )
{
    int *tmp = new int[ _last ];
    int iDst = 0; // Zielindex
    for( int iSrc = 0; iSrc &lt; _last; ++iSrc ) // über die Quelle laufen
    {
        if( values[ iSrc ] != val )
            tmp[ iDst++ ] = values[ iSrc ]; // nur kopieren und inkrementieren, wenn ungleich
    }
    _last = iDst; // Zielindex ist jetzt neues Ende
    delete[] values;
    values = tmp;
}
</code></pre>
<p>ansonsten sei Dir std::vector&lt; int &gt; und der Algorithmus std::remove(...) wärmstens empfohlen.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740535</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 10 Jul 2009 16:30:09 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 16:35:48 GMT]]></title><description><![CDATA[<p>Hi!</p>
<blockquote>
<pre><code class="language-cpp">if( values[ i ] != val ) 
            tmp[ i ] = values[ i + 1 ]; 

        else tmp[ i ] = values[ i + 1 ];
</code></pre>
</blockquote>
<p>Obige Zeilen bedeuten das gleiche wie:</p>
<pre><code class="language-cpp">tmp[i] = values[i+1];
</code></pre>
<p>also egal, ob values[ i ] != val oder ob values[ i ] == val ist.</p>
<p>Pack das Zeugs doch in einen Vector oder ne List, die Elemente lassen sich dann comfortabel löschen, hinzufügen, etc..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740539</guid><dc:creator><![CDATA[logik0r]]></dc:creator><pubDate>Fri, 10 Jul 2009 16:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 17:06:52 GMT]]></title><description><![CDATA[<p>Vielen Dank,</p>
<p>klar mit Vector ginge alles besser, aber es geht mir ums lernen und in der Prüfung wollen die keine STL sehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740549</guid><dc:creator><![CDATA[codyjack]]></dc:creator><pubDate>Fri, 10 Jul 2009 17:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 17:42:02 GMT]]></title><description><![CDATA[<p>Ok, verständlich.<br />
Hier eine Anregung:</p>
<pre><code class="language-cpp">// Löscht die Zahl num aus dem int-Array arr, das n Elemente hat und
// gibt ein neues Array zurück. 
// n bekommt die (eventuell neue) Größe es Arrays.
int* search_and_delete ( int* arr, int &amp;n, int num )
{
	int i = 0, j = 0;
	while ( i &lt; n )
	{
		if ( arr[i] != num )
			arr[j++] = arr[i];
		i++;
	}
	n = j;
	 // j hat die Anzahl der Elemente, die != num sind.
	return (int*)realloc (arr, n * sizeof(int));
 }

void show ( int* arr, int n )
{
	int i=0;
	if ( arr == NULL )
	{
		cout &lt;&lt; &quot;Empty array.&quot; &lt;&lt; endl;
		return;
	}

	cout &lt;&lt; &quot;Showing int array with &quot; &lt;&lt; n &lt;&lt; &quot; elements.&quot; &lt;&lt; endl;
	while(i&lt;n)
		cout &lt;&lt; arr[i++] &lt;&lt; endl;
	cout &lt;&lt; endl;
}
int main() 
{ 
	int n = 10;
	int* a  = new int [n];
	for ( int i=0; i&lt;n; i++ )
		a[i] = i;

	show (a, n);
	search_and_delete (a, n, 3);
	show (a, n);
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740573</guid><dc:creator><![CDATA[logik0r]]></dc:creator><pubDate>Fri, 10 Jul 2009 17:42:02 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 17:46:03 GMT]]></title><description><![CDATA[<p>Vielen Dank <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/1740576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740576</guid><dc:creator><![CDATA[codyjack]]></dc:creator><pubDate>Fri, 10 Jul 2009 17:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 17:47:16 GMT]]></title><description><![CDATA[<p>logik0r schrieb:</p>
<blockquote>
<pre><code class="language-cpp">return (int*)realloc (arr, n * sizeof(int));
</code></pre>
</blockquote>
<p>Ganz fest böse!</p>
<p><code>realloc</code> <strong>NIE</strong> in Verbindung mit <code>new</code> und <code>delete</code> verwenden. Überhaupt vorsichtig sein damit, da es nur mit PODs richtig funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740579</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 10 Jul 2009 17:47:16 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 17:49:28 GMT]]></title><description><![CDATA[<p>hm aber auch nicht so gut wegen c/c++ mix?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740582</guid><dc:creator><![CDATA[codyjack]]></dc:creator><pubDate>Fri, 10 Jul 2009 17:49:28 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 17:54:53 GMT]]></title><description><![CDATA[<p>Achjah, da war mal was...nagut, dann nimm malloc <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/1740587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740587</guid><dc:creator><![CDATA[logik0r]]></dc:creator><pubDate>Fri, 10 Jul 2009 17:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Mehrere Array Elemente löschen on Fri, 10 Jul 2009 18:32:15 GMT]]></title><description><![CDATA[<p>logik0r schrieb:</p>
<blockquote>
<p>Achjah, da war mal was...nagut, dann nimm malloc <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>
</blockquote>
<p>Nein, mach auch das nicht. In den meisten Fällen besteht unter C++ kein Grund, auf die C-Speicherverwaltung zurückzugreifen.</p>
<p>Gerade für Anfänger sind die C-Funktionen auch noch schwieriger zu bedienen und entsprechend fehleranfälliger (man muss zum Beispiel <code>sizeof</code> verwenden und casten). Als nächstes gibt es Probleme, wenn man mit Non-POD-Klassentypen arbeitet, da Konstruktoren und Destruktoren ignoriert werden. Dieser unnötige Aufwand lohnt sich einfach nicht, gerade weil man überhaupt keinen Gewinn durch <code>malloc()</code> &amp; Co. hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740615</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 10 Jul 2009 18:32:15 GMT</pubDate></item></channel></rss>