<?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[Mehrdimensionales Array AM STÜCK mit variabler Größe]]></title><description><![CDATA[<p>Hallo<br />
Ich habe folgendes Problem</p>
<p>Mein Programm liest zunächst Variabelen aus einer Datei ein. z.B x,y und z<br />
Dann möchte ich ein 3 dimensionales Array mit den Größen x, y und z erstellen.<br />
Da x,y,z nicht constant sind muss ich sie dynamisch erstellen:</p>
<pre><code>int ***matrix;
matrix=new int** [x];
for(i=0; i&lt;x; i++)
{
	matrix[i]=new int* [y];
	for(j=0; j&lt;y; j++)
	{
		matrix[i][j]=new int [z];
	}
}
</code></pre>
<p>Das Problem ist, dass der Speicher nicht am Stück ist und deshalb der eintrag matrix[0][1][10] nicht mit matrix[0][0][x+10] angesprochen werden kann. Dies ist aber für mein Problem notwendig.</p>
<p>Nun meine Frage:<br />
Gibt es eine Lösung um Arrays mit variabler Größe am Stück zu erstellen?<br />
Oder gibt es eine Methode die eingelesenen Variablen als konstanten zu behandeln?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299337/mehrdimensionales-array-am-stück-mit-variabler-größe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 07:57:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299337.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Feb 2012 17:47:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Wed, 08 Feb 2012 17:47:32 GMT]]></title><description><![CDATA[<p>Hallo<br />
Ich habe folgendes Problem</p>
<p>Mein Programm liest zunächst Variabelen aus einer Datei ein. z.B x,y und z<br />
Dann möchte ich ein 3 dimensionales Array mit den Größen x, y und z erstellen.<br />
Da x,y,z nicht constant sind muss ich sie dynamisch erstellen:</p>
<pre><code>int ***matrix;
matrix=new int** [x];
for(i=0; i&lt;x; i++)
{
	matrix[i]=new int* [y];
	for(j=0; j&lt;y; j++)
	{
		matrix[i][j]=new int [z];
	}
}
</code></pre>
<p>Das Problem ist, dass der Speicher nicht am Stück ist und deshalb der eintrag matrix[0][1][10] nicht mit matrix[0][0][x+10] angesprochen werden kann. Dies ist aber für mein Problem notwendig.</p>
<p>Nun meine Frage:<br />
Gibt es eine Lösung um Arrays mit variabler Größe am Stück zu erstellen?<br />
Oder gibt es eine Methode die eingelesenen Variablen als konstanten zu behandeln?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178605</guid><dc:creator><![CDATA[rokei]]></dc:creator><pubDate>Wed, 08 Feb 2012 17:47:32 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Wed, 08 Feb 2012 18:02:27 GMT]]></title><description><![CDATA[<p>Hallo erstmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <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>
<p>Nimm std::vector (oder einen anderen STL-Container), in diesem Fall <code>std::vector&lt;int&gt;</code> .<br />
Edit: Wenn du ein Multidimensionales Array erstellen willst, gibt's da in Boost etwas (falls du das kennst), oder (unschön aber was solls) sowas:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;std::vector&lt;int&gt; &gt; &gt; vec(10, std::vector&lt;std::vector&lt;int&gt; &gt;(10, std::vector&lt;int&gt;()));// Zwei aufeinanderfolgende Stereo-Klammern erst in C++11, hast du das?
</code></pre>
<p>Das erzeugt einen Drei-dimensionalen <code>vector</code> mit 10*10*0 Elementen. Zugriff wie immer (du es gewohnt bist). <strong>ABER:</strong> Das brauchst du sehr bestimmt nicht!<br />
Mach doch einfach für jede Datei ein Array <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Edit: Oben war was falsch, korrigiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178606</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 08 Feb 2012 18:02:27 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Wed, 08 Feb 2012 18:05:01 GMT]]></title><description><![CDATA[<p>rokei schrieb:</p>
<blockquote>
<p>Das Problem ist, dass der Speicher nicht am Stück ist und deshalb der eintrag matrix[0][1][10] nicht mit matrix[0][0][x+10] angesprochen werden kann. Dies ist aber für mein Problem notwendig.</p>
</blockquote>
<p>Na dann erstell doch einen std::vector der Größe x*y*z und sprich die einzelnen Elemente mit [i*y*z + j*z + k] (oder wie auch immer du es machen möchtest) an. Die Berechnung kannst du auch noch in eine separate Funktion pos(i,j,k) auslagern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178612</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 08 Feb 2012 18:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Wed, 08 Feb 2012 18:07:40 GMT]]></title><description><![CDATA[<p>rokei schrieb:</p>
<blockquote>
<p>Dies ist aber für mein Problem notwendig.</p>
</blockquote>
<p>Erklär uns mal dein Problem, ich bin sicher das kann man schöner lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178613</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 08 Feb 2012 18:07:40 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Wed, 08 Feb 2012 18:31:06 GMT]]></title><description><![CDATA[<p>Erst mal danke für die Antworten</p>
<p>Hacker schrieb:</p>
<blockquote>
<p>rokei schrieb:</p>
<blockquote>
<p>Dies ist aber für mein Problem notwendig.</p>
</blockquote>
<p>Erklär uns mal dein Problem, ich bin sicher das kann man schöner lösen.</p>
</blockquote>
<p>Ich muss die Array später durch über den letzten Index ansprechen. d.h matrix[0][0][wert]. Eine Möglichkeit wäre die Matrix so anzusprechen:<br />
matrix[wert/(x*y)][(wert/z)%y][wert%z].<br />
Allerdings habe ich festgestellt das dies mein Programm sehr stark verlangsamt.</p>
<p>Ich probier jetzt mal das dreidimensionale Array in ein eindimensionales der Grße x*y*z umzuwandeln dann sollte es eigentlich funktionieren.</p>
<p>Edit: bzw gibt es eine Möglichkeit der main-funktion variablen mitzugeben und diese dann wie Konstanten zu behandeln? Dann könnte ich meine array nichtdynamisch erstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178618</guid><dc:creator><![CDATA[rokei]]></dc:creator><pubDate>Wed, 08 Feb 2012 18:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Wed, 08 Feb 2012 18:26:31 GMT]]></title><description><![CDATA[<p>Mit dem eindimensionalen Array solltest du am performantesten sein. Achte aber auf Cachefreundlichkeit, d.h. mappe die drei Dimensionen so auf dein Array, dass du den Speicher sequentiell durchwanderst und nicht im Speicher wild umherspringen musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178623</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 08 Feb 2012 18:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Thu, 09 Feb 2012 14:35:40 GMT]]></title><description><![CDATA[<p>Danke Michael. Es klappt jetzt.<br />
Allerdings hab ich beim Zugriff auf das Array immer noch einen Perfomance Verlust im Vergleich zum statischen Array.<br />
Gibt es keine Möglichkeit meinem Main Programm die Parameter so zu übergeben, dass ich sie als Konstanten behandeln kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178942</guid><dc:creator><![CDATA[rokei]]></dc:creator><pubDate>Thu, 09 Feb 2012 14:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Thu, 09 Feb 2012 15:44:35 GMT]]></title><description><![CDATA[<p>wenn Du über die letzte Dimension zugreifst, sollte die von Hacker vorgeschlagene Version mit vector nicht langsamer sein als ein statisches Feld. Erst wenn Du im wesentlichen über die &quot;höheren&quot; (oder wie auch immer man das nennen mag) Dimensionen zugreifst spielt das eine Rolle, weil dann Cache Effekte zum Tragen kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178983</guid><dc:creator><![CDATA[performance]]></dc:creator><pubDate>Thu, 09 Feb 2012 15:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Thu, 09 Feb 2012 16:07:52 GMT]]></title><description><![CDATA[<p>Nix für ungut, aber dieses Thema hatten wir in den letzten 2 Monaten geschätzte 400 Mal. Wenn du die Suchfunktion des Forums benutzt findest du alle wichtigen Informationen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178991</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 09 Feb 2012 16:07:52 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array AM STÜCK mit variabler Größe on Thu, 09 Feb 2012 17:17:25 GMT]]></title><description><![CDATA[<p>rokei schrieb:</p>
<blockquote>
<p>Allerdings hab ich beim Zugriff auf das Array immer noch einen Perfomance Verlust im Vergleich zum statischen Array.</p>
</blockquote>
<p>Dann machst du etwas falsch <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="😉"
    /> Hast du im Release-Modus kompiliert? Liegt die Matrix in der Reihenfolge im Speicher, wie du sie durchläufst?</p>
<p>Zu den von DocShoe angesprochenen Threads: Lies dir mal <a href="http://www.c-plusplus.net/forum/298756-full" rel="nofollow">http://www.c-plusplus.net/forum/298756-full</a> durch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179028</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 09 Feb 2012 17:17:25 GMT</pubDate></item></channel></rss>