<?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[Vectorklasse, Probleme]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich hab mich mal an einer Vectorklasse versucht, und stoße auf 2 Probleme (die markeire ich im Code)</p>
<p>bitte nicht an der form stören..</p>
<pre><code class="language-cpp">const int GROW=10;
class StackAsVector
{
 public:
  StackAsVector(int size){data = new int[size];TopIndex=-1;vsize=size;}
  StackAsVector(const StackAsVector&amp; sav)           //copy konstruktor
  {
   vsize = sav.vsize;
   data = new int[vsize];
   TopIndex=sav.TopIndex;
   for(int i=0;i&lt;vsize;i++)
    data[i]=sav.data[i];
  }

  void Pop()
   {
    if(TopIndex==-1)
     cout&lt;&lt;&quot;Stack bereits leer&quot;;
    else
     {
      data[TopIndex]=0;
      TopIndex--;
     }
   }

  int Top(){return data[TopIndex];}

  int Size(){return TopIndex+1;}

  int Capacity(){return vsize;}

  void Push(int number)
  {
   TopIndex++;
   if(TopIndex==vsize)
    Grow();

   data[TopIndex]=number;
  }

  bool isEmpty(){return TopIndex==-1;}

  int ElementAt(int at){return data[at];}

  void InsertAt(int at,int number)     //hier habe ich probleme, wie könnte ich diese funktion am besten programmieren??? Wenn ichdie in main aufrufe, bleibt er in endlosschleife
  {
   TopIndex++;
   if(TopIndex==vsize)
    Grow();
   if(at&gt;vsize)
    Grow();
   if(at&gt;TopIndex)
    {
    data[at]=number;
    }
    else
    {
     int rest = Size()-(at+1);
     int* temp1 = new int[at-1];
     int* temp2 = new int[rest];
     for(int i=0;i&lt;at;i++)
      temp1[i]=data[i];
     for(int i=at;i&lt;rest;i++)
      temp2[i]=data[i];

     data=new int[vsize];
     for(int i=0;i&lt;at;i++)
      data[i]=temp1[i];

     data[at]=number;

     for(int i=at;i&lt;rest;i++)
      data[i]=temp2[i];

     delete[] temp1;
     delete[] temp2;
    }

  }

  void DeleteAt(int at);

  void Empty()
  {

   delete[] data;

   vsize=GROW;
   data = new int[vsize];
   for(int i=0;i&lt;vsize;i++)
    data[i]=0;
   TopIndex=-1;
  }

  void PrintData(int start,int end,int mode=0)
  {
   if(mode&gt;1||mode&lt;0)
    mode=0;

   if(mode==0)
   {
    for(int i=start;i&lt;=end;i++)
    {
     cout&lt;&lt;&quot;Element an Position: &quot;&lt;&lt;i&lt;&lt;&quot; ist: &quot;&lt;&lt;data[i]&lt;&lt;endl;
    }
   }
   else
   {
    for(int i=end;i&gt;=start;i--)
    {
     cout&lt;&lt;&quot;Element an Position: &quot;&lt;&lt;i&lt;&lt;&quot; ist: &quot;&lt;&lt;data[i]&lt;&lt;endl;
    }
   }
  }

  void operator=(const StackAsVector&amp; sav)
  {

  }
  void operator=(const int number)
  {
    Push(number);
  }

  ~StackAsVector(){delete[] data;}
 private:

  int vsize;
  int* data;
  int TopIndex;

  void Grow()
  {
   int* temp = data;  //altes array sichern
   vsize+=GROW;       //Größe erhöhen
   delete[] data;     //speicher freigeben
   data = new int[vsize];

   for (int i=0;i&lt;TopIndex;i++)             //daten umkopieren
   {
    data[i]=temp[i];
   }

   delete[] temp;     //temporären speicher freigeben
  }
};
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
 typedef StackAsVector SAV;
 SAV t(10);
 SAV t2(t);
 /*cout&lt;&lt;&quot;Alte groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte groesse copy: &quot;&lt;&lt;t2.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte Kapazitaet copy: &quot;&lt;&lt;t2.Capacity()&lt;&lt;endl;
 for(int i=0;i&lt;10;i++)
 {
  t.Push(i);
 }
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;AUSGABE:&quot;&lt;&lt;endl;
 for (int i=0;i&lt;11;i++)
 {
  if(t.isEmpty())
   {
   cout&lt;&lt;&quot;Ende erreicht&quot;&lt;&lt;endl;
   break;
   }
  cout&lt;&lt;t.Top()&lt;&lt;endl;
  t.Pop();
 }
 for(int i=0;i&lt;12;i++)
 {
  t.Push(i);
 }
 t.PrintData(3,7,1);
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;Element an Position 2: &quot;&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 t.Empty();
 cout&lt;&lt;&quot;Stack geloescht&quot;&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 t=23;                                */
 cout&lt;&lt;t.Top()&lt;&lt;endl;
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size()&lt;&lt;endl;
 t.Push(1);
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size()&lt;&lt;endl;
 t.Push(1);
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size();  //hier gibt er plötzlich völlig falsche werte aus, wieso??
 cout&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 //t.InsertAt(2,20);
 cout&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 cout&lt;&lt;t.ElementAt(3)&lt;&lt;endl;
 getch();       return 0;
}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/129545/vectorklasse-probleme</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 08:12:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129545.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Dec 2005 14:15:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vectorklasse, Probleme on Wed, 14 Dec 2005 14:15:41 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich hab mich mal an einer Vectorklasse versucht, und stoße auf 2 Probleme (die markeire ich im Code)</p>
<p>bitte nicht an der form stören..</p>
<pre><code class="language-cpp">const int GROW=10;
class StackAsVector
{
 public:
  StackAsVector(int size){data = new int[size];TopIndex=-1;vsize=size;}
  StackAsVector(const StackAsVector&amp; sav)           //copy konstruktor
  {
   vsize = sav.vsize;
   data = new int[vsize];
   TopIndex=sav.TopIndex;
   for(int i=0;i&lt;vsize;i++)
    data[i]=sav.data[i];
  }

  void Pop()
   {
    if(TopIndex==-1)
     cout&lt;&lt;&quot;Stack bereits leer&quot;;
    else
     {
      data[TopIndex]=0;
      TopIndex--;
     }
   }

  int Top(){return data[TopIndex];}

  int Size(){return TopIndex+1;}

  int Capacity(){return vsize;}

  void Push(int number)
  {
   TopIndex++;
   if(TopIndex==vsize)
    Grow();

   data[TopIndex]=number;
  }

  bool isEmpty(){return TopIndex==-1;}

  int ElementAt(int at){return data[at];}

  void InsertAt(int at,int number)     //hier habe ich probleme, wie könnte ich diese funktion am besten programmieren??? Wenn ichdie in main aufrufe, bleibt er in endlosschleife
  {
   TopIndex++;
   if(TopIndex==vsize)
    Grow();
   if(at&gt;vsize)
    Grow();
   if(at&gt;TopIndex)
    {
    data[at]=number;
    }
    else
    {
     int rest = Size()-(at+1);
     int* temp1 = new int[at-1];
     int* temp2 = new int[rest];
     for(int i=0;i&lt;at;i++)
      temp1[i]=data[i];
     for(int i=at;i&lt;rest;i++)
      temp2[i]=data[i];

     data=new int[vsize];
     for(int i=0;i&lt;at;i++)
      data[i]=temp1[i];

     data[at]=number;

     for(int i=at;i&lt;rest;i++)
      data[i]=temp2[i];

     delete[] temp1;
     delete[] temp2;
    }

  }

  void DeleteAt(int at);

  void Empty()
  {

   delete[] data;

   vsize=GROW;
   data = new int[vsize];
   for(int i=0;i&lt;vsize;i++)
    data[i]=0;
   TopIndex=-1;
  }

  void PrintData(int start,int end,int mode=0)
  {
   if(mode&gt;1||mode&lt;0)
    mode=0;

   if(mode==0)
   {
    for(int i=start;i&lt;=end;i++)
    {
     cout&lt;&lt;&quot;Element an Position: &quot;&lt;&lt;i&lt;&lt;&quot; ist: &quot;&lt;&lt;data[i]&lt;&lt;endl;
    }
   }
   else
   {
    for(int i=end;i&gt;=start;i--)
    {
     cout&lt;&lt;&quot;Element an Position: &quot;&lt;&lt;i&lt;&lt;&quot; ist: &quot;&lt;&lt;data[i]&lt;&lt;endl;
    }
   }
  }

  void operator=(const StackAsVector&amp; sav)
  {

  }
  void operator=(const int number)
  {
    Push(number);
  }

  ~StackAsVector(){delete[] data;}
 private:

  int vsize;
  int* data;
  int TopIndex;

  void Grow()
  {
   int* temp = data;  //altes array sichern
   vsize+=GROW;       //Größe erhöhen
   delete[] data;     //speicher freigeben
   data = new int[vsize];

   for (int i=0;i&lt;TopIndex;i++)             //daten umkopieren
   {
    data[i]=temp[i];
   }

   delete[] temp;     //temporären speicher freigeben
  }
};
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
 typedef StackAsVector SAV;
 SAV t(10);
 SAV t2(t);
 /*cout&lt;&lt;&quot;Alte groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte groesse copy: &quot;&lt;&lt;t2.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte Kapazitaet copy: &quot;&lt;&lt;t2.Capacity()&lt;&lt;endl;
 for(int i=0;i&lt;10;i++)
 {
  t.Push(i);
 }
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;AUSGABE:&quot;&lt;&lt;endl;
 for (int i=0;i&lt;11;i++)
 {
  if(t.isEmpty())
   {
   cout&lt;&lt;&quot;Ende erreicht&quot;&lt;&lt;endl;
   break;
   }
  cout&lt;&lt;t.Top()&lt;&lt;endl;
  t.Pop();
 }
 for(int i=0;i&lt;12;i++)
 {
  t.Push(i);
 }
 t.PrintData(3,7,1);
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;Element an Position 2: &quot;&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 t.Empty();
 cout&lt;&lt;&quot;Stack geloescht&quot;&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 t=23;                                */
 cout&lt;&lt;t.Top()&lt;&lt;endl;
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size()&lt;&lt;endl;
 t.Push(1);
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size()&lt;&lt;endl;
 t.Push(1);
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size();  //hier gibt er plötzlich völlig falsche werte aus, wieso??
 cout&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 //t.InsertAt(2,20);
 cout&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 cout&lt;&lt;t.ElementAt(3)&lt;&lt;endl;
 getch();       return 0;
}
//---------------------------------------------------------------------------
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/942029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942029</guid><dc:creator><![CDATA[Wahlwiederholung]]></dc:creator><pubDate>Wed, 14 Dec 2005 14:15:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Wed, 14 Dec 2005 14:27:36 GMT]]></title><description><![CDATA[<p>Wahlwiederholung schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void Grow()
  {
   int* temp = data;  //altes array sichern
   vsize+=GROW;       //Größe erhöhen
   delete[] data;     //speicher freigeben //&lt;-FEHLER
   data = new int[vsize];

   for (int i=0;i&lt;TopIndex;i++)             //daten umkopieren
   {
    data=temp[i];
   }

   delete[] temp;     //temporären speicher freigeben
  }
};
</code></pre>
</blockquote>
<p><em>Also das kann so nicht funktionieren - mit dem &quot;delete[] data;&quot; löschst du die Daten deines Stacks und versuchst [i]anschließend</em>, diese Daten zu kopieren. Lass mal diese Zeile weg, dann solltest du eigentlich sinnvollere Werte bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942041</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 14 Dec 2005 14:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Wed, 14 Dec 2005 14:40:15 GMT]]></title><description><![CDATA[<p>wieso kann das nicht gehen?<br />
Hab doch vorher schon data in temp gespeichert, und kopiere dann in das neue data die alten werte rein....</p>
<p>PS: in der for schleife heißt eigentlich data[i]=temp[i]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942050</guid><dc:creator><![CDATA[Wahlwiederholung]]></dc:creator><pubDate>Wed, 14 Dec 2005 14:40:15 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Wed, 14 Dec 2005 14:50:51 GMT]]></title><description><![CDATA[<p>Du sicherst höchstens die Adresse des ersten Feldelementes, nicht das Ursprungsfeld. Dazu musst Du erstmal ein Feld für die Kopie erzeugen.</p>
<p>Aber Vorschlag: Baue doch erstmal das neue Array komplett auf und lösch dann das alte...</p>
<p>Und das delete[] temp ist auch übel:</p>
<pre><code class="language-cpp">int *temp = data; // temp und data zeigen nun auf das selbe Feld
delete[] data; // das Feld wird gelöscht
... /* Hier wird es sogar benutzt!! */
delete[] temp; // das Feld wird nochmal gelöscht
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/942060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942060</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 14 Dec 2005 14:50:51 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Wed, 14 Dec 2005 15:03:30 GMT]]></title><description><![CDATA[<p>hm...wenn ich das delete[] wegmache, geht es trotzdem nicht</p>
<p>und wenn ich in der main das obere auskommentierte wieder reinmache geht es da oben:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
 typedef StackAsVector SAV;
 SAV t(10);
 SAV t2(t);
 cout&lt;&lt;&quot;Alte groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte groesse copy: &quot;&lt;&lt;t2.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Alte Kapazitaet copy: &quot;&lt;&lt;t2.Capacity()&lt;&lt;endl;
 for(int i=0;i&lt;10;i++)
 {
  t.Push(i);
 }
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;   //das geht, richtiger wert 10
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;AUSGABE:&quot;&lt;&lt;endl;    /*
 for (int i=0;i&lt;11;i++)
 {
  if(t.isEmpty())
   {
   cout&lt;&lt;&quot;Ende erreicht&quot;&lt;&lt;endl;
   break;
   }
  cout&lt;&lt;t.Top()&lt;&lt;endl;
  t.Pop();
 }
 for(int i=0;i&lt;12;i++)
 {
  t.Push(i);
 }
 t.PrintData(3,7,1);
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 cout&lt;&lt;&quot;Element an Position 2: &quot;&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 t.Empty();
 cout&lt;&lt;&quot;Stack geloescht&quot;&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue groesse: &quot;&lt;&lt;t.Size()&lt;&lt;endl;
 cout&lt;&lt;&quot;Neue Kapazitaet: &quot;&lt;&lt;t.Capacity()&lt;&lt;endl;
 t=23;                                */
 cout&lt;&lt;t.Top()&lt;&lt;endl;
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size()&lt;&lt;endl;
 t.Push(1);
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size()&lt;&lt;endl;
 t.Push(1);
 cout&lt;&lt;&quot;Groesse:&quot;&lt;&lt;t.Size();
 cout&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 //t.InsertAt(2,20);
 cout&lt;&lt;t.ElementAt(2)&lt;&lt;endl;
 cout&lt;&lt;t.ElementAt(3)&lt;&lt;endl;
 getch();       return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/942080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942080</guid><dc:creator><![CDATA[Wahlwiederholung]]></dc:creator><pubDate>Wed, 14 Dec 2005 15:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Thu, 15 Dec 2005 07:00:22 GMT]]></title><description><![CDATA[<p>hm...weiß keiner was??</p>
<p>Wie müsste denn die Grow() und InsertAT() funktion richtig aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942533</guid><dc:creator><![CDATA[Wahlwiederholung]]></dc:creator><pubDate>Thu, 15 Dec 2005 07:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Thu, 15 Dec 2005 08:37:09 GMT]]></title><description><![CDATA[<p>Mal ein Beispiel für Grow</p>
<pre><code class="language-cpp">void Grow()
{
   int* temp = new int[vsize+GROW];  // Speicher für neue Größe allozieren
   for (int i=0;i&lt;TopIndex;++i)      // Daten umkopieren
   {
    temp[i] = data[i];
   }
   vsize += GROW;                    // Größe erhöhen
   std::swap(temp,data);             // Pointer tauschen
   delete[] temp;                    // Speicher freigeben
}
</code></pre>
<p>Statt der for-Schleife könnte man auch memcpy einsetzen. Desweiteren würde ich nicht um GROW erhöhen, sondern hier eher einen Multiplikator einsetzen (üblich ist hier 2).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942586</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 15 Dec 2005 08:37:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Thu, 15 Dec 2005 08:51:04 GMT]]></title><description><![CDATA[<p>ok, aber in Volkards Tut bei StackAsVector bei der Lösung ist aber die das erhöhen des Stacks so wie ich es gemacht habe!!!</p>
<p>was genau passiert hier durch das swap?</p>
<p>Und wie könnte ich das mit dem InsertAt() lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942596</guid><dc:creator><![CDATA[Wahlwiederholung]]></dc:creator><pubDate>Thu, 15 Dec 2005 08:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Thu, 15 Dec 2005 09:04:04 GMT]]></title><description><![CDATA[<p>Das Erhöhen kann man letztlich machen wie man will. In zwei mir bekannten Implementationen von vector (stl) wird mit Faktor 2 multipliziert. Deswegen die Bemerkung.<br />
Der Kommentar hinter swap sagt doch eigentlich alles. Ansonsten schau mal in die Hilfe zu swap.<br />
Zu InsertAt.<br />
Da will ich erstmal keinen Quellcode angeben. Nur ein paar Hinweise.<br />
Das mit dem Grow am Anfang ist erstmal richtig.<br />
Du brauchst dann aber keine temporären Arrays mehr.<br />
Kopiere einfach ab der Einfügeposition alle Elemente eins nach hinten (von hinten anfangen).<br />
Füge dann das Element an der gewünschten Position ein.<br />
Dann sollte es gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942607</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 15 Dec 2005 09:04:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Thu, 15 Dec 2005 13:57:12 GMT]]></title><description><![CDATA[<p>nein mir geht es hier drum:</p>
<pre><code class="language-cpp">int* temp = new int[vsize+GROW];  // Speicher für neue Größe allozieren 
   for (int i=0;i&lt;TopIndex;++i)      // Daten umkopieren 
   { 
    temp[i] = data[i]; 
   }
</code></pre>
<p>da in volkards tut das kopieren in ein anderes array so steht:</p>
<pre><code class="language-cpp">int* temp = data;
</code></pre>
<p>ja swap is eigentl klar!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942896</guid><dc:creator><![CDATA[Wahlwiederholung]]></dc:creator><pubDate>Thu, 15 Dec 2005 13:57:12 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Thu, 15 Dec 2005 14:04:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int* temp=data;
</code></pre>
<p>kopiert überhaupt keine Daten, sondern setzt nur einen Ersatzzeiger auf deine vorhandenen Daten - danach kannst du data einen neuen Bereich zuweisen und die Daten aus dem alten Bereich (auf den temp immer noch zeigt) dorthin verschieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942905</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 15 Dec 2005 14:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Thu, 15 Dec 2005 14:08:49 GMT]]></title><description><![CDATA[<p>Das geht natürlich auch so, hat aber den Nachteil, dass wenn bei der Allozierung neuen Speichers etwas schief geht, der Status deiner Instanz gestört ist und du nicht mehr an deine Daten kommst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/942909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/942909</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 15 Dec 2005 14:08:49 GMT</pubDate></item><item><title><![CDATA[Reply to Vectorklasse, Probleme on Fri, 16 Dec 2005 08:33:25 GMT]]></title><description><![CDATA[<p>hm...weiß nich ob das so geht, hab mal grad was ausgedacht (ohne zu testen)</p>
<pre><code class="language-cpp">int insertElementAt(int _number, int _position)
  {
   TopIndex=TopIndex+1;
   if(TopIndex==size)
    Grow();

   int* temp = new int[TopIndex];    //um daten ab/inkl _position zu sichern

   for(int i=_position-1;i&lt;TopIndex+1;i++)
   {
    temp[i]=data[i];
   }

   data[_position]=_number;         //nummer einfügen an gewünschter position

   for(int i=_position+1;i&lt;TopIndex+1;i++)
   {
    data[i]=temp[i-1];               //gesicherten daten nach position wieder einfügen
   }

   delete[] temp;
  }
</code></pre>
<p>gibt wohl aber sicher bessere lösungen?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/943308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/943308</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Fri, 16 Dec 2005 08:33:25 GMT</pubDate></item></channel></rss>