<?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[Dynamisches 1D-Array erweitern]]></title><description><![CDATA[<p>Hi Leutz,</p>
<p>ich habe da folgendes Problem. Ich habe eine Klasse erstellt, die zwei Membervariablen enthält.</p>
<p>long AB_Number_class_Profiles;<br />
AB_classified_Laserprofil *AB_P_class_Profiles;</p>
<p>Und zwar handelt es sich um eine Variable vom Typ long, die mir angibt, wieviele Querprofile in der Klasse enthalten sein sollen und dann zusätzlich einen Pointer auf ein später im Construktor dynamisch generiertes 1D-Array der einzelnen Profile. z.B. der Standardkonstruktor</p>
<p>AB_classified_Laserprofil_Array::AB_classified_Laserprofil_Array(void)<br />
{<br />
AB_Number_class_Profiles = 1;<br />
AB_P_class_Profiles = new AB_classified_Laserprofil[1];<br />
}</p>
<p>Bisher wußte ich immer, wie viele Profile verarbeitet werden sollen und konnte dann über entsprechende Memberfunktionen die Anzahl der Profile ändern, das Feld neu anlegen und anschließend die Profile einfügen (siehe Funktion)</p>
<p>void AB_classified_Laserprofil_Array::Set_Number_of_Profiles(long Number_Profiles)<br />
{<br />
AB_Number_class_Profiles = Number_Profiles;</p>
<p>delete []AB_P_class_Profiles;<br />
AB_P_class_Profiles = new AB_classified_Laserprofil[Number_Profiles];<br />
}</p>
<p>Jetzt möchte ich aber das Feld um neue Profile erweitern, ohne die alten zeitaufwendig aus dem alten Array herauszulesen und in dem neuen erweiterten abzulegen. Gibt es da Möglichkeiten? Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133471/dynamisches-1d-array-erweitern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 22:57:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133471.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Jan 2006 08:46:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamisches 1D-Array erweitern on Wed, 18 Jan 2006 08:46:03 GMT]]></title><description><![CDATA[<p>Hi Leutz,</p>
<p>ich habe da folgendes Problem. Ich habe eine Klasse erstellt, die zwei Membervariablen enthält.</p>
<p>long AB_Number_class_Profiles;<br />
AB_classified_Laserprofil *AB_P_class_Profiles;</p>
<p>Und zwar handelt es sich um eine Variable vom Typ long, die mir angibt, wieviele Querprofile in der Klasse enthalten sein sollen und dann zusätzlich einen Pointer auf ein später im Construktor dynamisch generiertes 1D-Array der einzelnen Profile. z.B. der Standardkonstruktor</p>
<p>AB_classified_Laserprofil_Array::AB_classified_Laserprofil_Array(void)<br />
{<br />
AB_Number_class_Profiles = 1;<br />
AB_P_class_Profiles = new AB_classified_Laserprofil[1];<br />
}</p>
<p>Bisher wußte ich immer, wie viele Profile verarbeitet werden sollen und konnte dann über entsprechende Memberfunktionen die Anzahl der Profile ändern, das Feld neu anlegen und anschließend die Profile einfügen (siehe Funktion)</p>
<p>void AB_classified_Laserprofil_Array::Set_Number_of_Profiles(long Number_Profiles)<br />
{<br />
AB_Number_class_Profiles = Number_Profiles;</p>
<p>delete []AB_P_class_Profiles;<br />
AB_P_class_Profiles = new AB_classified_Laserprofil[Number_Profiles];<br />
}</p>
<p>Jetzt möchte ich aber das Feld um neue Profile erweitern, ohne die alten zeitaufwendig aus dem alten Array herauszulesen und in dem neuen erweiterten abzulegen. Gibt es da Möglichkeiten? Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969489</guid><dc:creator><![CDATA[Redone]]></dc:creator><pubDate>Wed, 18 Jan 2006 08:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches 1D-Array erweitern on Wed, 18 Jan 2006 09:23:29 GMT]]></title><description><![CDATA[<p>Ob es Möglichkeiten gibt? Wieviele brauchst Du denn? <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>Ich habe mal was realisiert, was mit Tags arbeitet (weil das ganze sowieso eine Tagbasierte Beschreibung war). War der Speicher knapp schrieb ich ein Tag rein, dass auf den nächsten Speicherblock verwies und dort schrieb ich weiter.<br />
Das ist allerdings etwas spezialisiert.</p>
<p>Wenn Du es etwas universeller wünschst, kannst Du Dir auch die Idee der Linux INodes mal ansehen und daraus was basteln:<br />
Wenn Du üblicherweise 16 Einträge hast, schreibst Du sie in ein Array in Deiner Klasse. Hast Du mehr als 16, aber weniger als 255, erweiterst Du ein Array von Arrays.</p>
<pre><code class="language-cpp">class DynamicArray
{
  int      Items;
  Type    Direct[16];     // Einträge 0-15
  Type  * Indirect1[15];  // Einträge 16-255 ( mit 15 Arrays je 16 Einträge )
  Type ** Indirect2[15];  // Einträge 255-65535 ( 15 Arrays je 15 Arrays je 16 Einträge )
};
</code></pre>
<p>Die Verwaltung braucht also ein int, ein Array von 16 entsprechend Deines Types und 2 Zeiger. Wo Du zugreifen musst, verrät Dir der Index, das geht bei der hier gewählten Basis recht fix mittels der Und-Funktion und den Schiebeoperatoren.<br />
Für die Einträge 0 bis 16 ist alles easy.<br />
Wenn Du den 16. Eintrag machst, erkennst Du, dass Indirekt2 noch nicht existiert, also legst Du das Array an. Dann erkennst Du, dass Indirekt2[0] noch nicht existiert und legst dafür das Array an, wo Du anschließend den ersten Eintrag plazierst.</p>
<p>So kannst Du auch Array[5] und Array[4711] beschriften, obwohl das Array selber nur 32 Einträge groß ist (plus 2 Zeigerarrays + 1 int + 2 Zeiger = 140 Bytes Verwaltungsoverhead auf 32Bit Rechnern)</p>
<p>Der Zugriff ist entsprechend des Indexes aufwendiger. Dafür ist die Verwaltung bei kleinen Arrays sparsam und das Erweitern kostet nicht viel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969511</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 18 Jan 2006 09:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches 1D-Array erweitern on Wed, 18 Jan 2006 09:55:32 GMT]]></title><description><![CDATA[<p>Oder du kannst mal nachsehen, ob einer der STL-Container für dich geignet ist (besonders vector oder deque könnten brauchbar sein).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969536</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Wed, 18 Jan 2006 09:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches 1D-Array erweitern on Wed, 18 Jan 2006 10:51:12 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11309">@Xin</a> Sobald ich also das 16. Element setzen will, weise ich dann also dem Pointer Indirect1[0] ein Array mit 16 Elementen meines Typs zu und fülle das 0.Element des 0.Arrays von Indirect1 Richtig? Das heißt dann aber auch, dass ich in der Regel bzw. je nach Wahl meiner Basis (in dem Falle 16) damit rechnen muss, mehr Arrays angelegt zu haben, als ich wirklich nutze.</p>
<p>Also gibt es in meinem konkreten Fall keine Möglichkeit unter Beibehaltung der bisherigen Programmierung (also diese beiden Membervariablen) das Array zu erweitern?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a> Ich werde mir das Ganze gleich mal anschauen. Habe auch von einem Kollegen diesen Tip bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969603</guid><dc:creator><![CDATA[Redone]]></dc:creator><pubDate>Wed, 18 Jan 2006 10:51:12 GMT</pubDate></item></channel></rss>