<?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 kopieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich versuche ein Mehrdimensionales Array zu kopieren unterbricht das Programm manchmal mit einer Speicher Verletzung.</p>
<p>Kann mir vielleicht jemand sagen wo bzw. was der Fehler ist?</p>
<pre><code class="language-cpp">void myFunction(float* my2DArray, int row, int size){
	//Bei my2DArray handelt es sich um ein sequenziell
	//allokiertes zweidimensionales Array

	int i=0, j=0;
	float* my2DArrayCopy = new float(size);

	//Array kopieren
	for(i=0; i&lt;row; i++)
	{
		for (j=0; j&lt;size; j++){
			my2DArrayCopy[size*i+j]=my2DArray[size*i+j];
		}
	}

	//...

	//Array Kopie einfügen
	for(i=0; i&lt;row; i++)
	{	
		for(j=0; j&lt;size; j++){
			my2DArray[size*i+j] = my2DArrayCopy[size*i+j];
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/216886/mehrdimensionales-array-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 23:02:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216886.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Jun 2008 10:32:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 10:32:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich versuche ein Mehrdimensionales Array zu kopieren unterbricht das Programm manchmal mit einer Speicher Verletzung.</p>
<p>Kann mir vielleicht jemand sagen wo bzw. was der Fehler ist?</p>
<pre><code class="language-cpp">void myFunction(float* my2DArray, int row, int size){
	//Bei my2DArray handelt es sich um ein sequenziell
	//allokiertes zweidimensionales Array

	int i=0, j=0;
	float* my2DArrayCopy = new float(size);

	//Array kopieren
	for(i=0; i&lt;row; i++)
	{
		for (j=0; j&lt;size; j++){
			my2DArrayCopy[size*i+j]=my2DArray[size*i+j];
		}
	}

	//...

	//Array Kopie einfügen
	for(i=0; i&lt;row; i++)
	{	
		for(j=0; j&lt;size; j++){
			my2DArray[size*i+j] = my2DArrayCopy[size*i+j];
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1538421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538421</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Mon, 30 Jun 2008 10:32:28 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 10:43:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">float* my2DArrayCopy = new float(row * size);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1538425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538425</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 30 Jun 2008 10:43:49 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 11:12:55 GMT]]></title><description><![CDATA[<p>Das war schon mal ein Fehler, aber leider bekomme ich immer noch die Fehlermeldung:</p>
<p>Die Anweisung in &quot;0x5b0f6db6&quot; verweist auf Speicher in &quot;0x3f7ae154&quot;. Der Vorgang &quot;read&quot; konnte nicht auf dem Speicher durchgeführt werden.</p>
<p>Fällt vielleicht noch jemand ein Fehler auf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538455</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Mon, 30 Jun 2008 11:12:55 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 11:20:08 GMT]]></title><description><![CDATA[<p>Ist vllt. das Array, das Du der Funktion mit gibst zu klein?</p>
<p>PS:<br />
Machst Du das zu Übungszwecken? Wenn nicht, bietet C++ deutlich bessere Möglichkeiten, sowas zu bewerkstelligen.<br />
PPS:<br />
Falls Du übst, vergiss nicht, den allokierten Speicher auch wieder mit <code>delete[]</code> freizugeben.</p>
<p>PPPS: ich habe nicht genau hingesehen:</p>
<pre><code class="language-cpp">float* my2DArrayCopy = new float[row * size]; //mit[], nicht mit()
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1538460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538460</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 30 Jun 2008 11:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 11:38:24 GMT]]></title><description><![CDATA[<p>Sharpie schrieb:</p>
<blockquote>
<p>wenn ich versuche ein Mehrdimensionales Array zu kopieren</p>
</blockquote>
<p>Das, was du willst, ist aber ein eindimensionales Array:</p>
<pre><code class="language-cpp">float* my2DArrayCopy = new float[row * size];
</code></pre>
<p>Ein zweidimensionales sähe so aus:</p>
<pre><code class="language-cpp">// Erstellen
float** my2DArrayCopy = new float*[row];
for (short i = 0; i &lt; row; i++)
	my2DArrayCopy[i] = new float[size];

// Löschen
for (short i = 0; i &lt; row; i++)
	delete my2DArrayCopy[i];
delete[] my2DArrayCopy;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1538481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538481</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 30 Jun 2008 11:38:24 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 11:50:04 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>...Ein zweidimensionales sähe so aus...</p>
</blockquote>
<p>Hmm, für mich ist das ein Array aus Zeigern auf eindimensionale Float-Arrays. <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="😉"
    /><br />
Ob ein Array 1, 2 oder n-dimensional ist, ist doch nur eine Sache der Abstraktion. Man kann ohne weiters n Dimensionen auf ein lineares Array abbilden, so wie es der TO tut. Durch die passendere Dimensionierung erhält es dann eben seine N Dimensionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538493</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 30 Jun 2008 11:50:04 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 11:54:15 GMT]]></title><description><![CDATA[<p>Das übergebene Array ist nicht zu klein mit den eckigen Klammern funktioniert es jetzt!</p>
<p>Den allokierten Speicher wieder frei zu geben habe ich bedacht <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>Das war eigentlich nicht zu Übungszwecken gedacht, welche deutlich besseren Möglichkeiten bietet mir den C++ sowas zu bewerkstelligen?</p>
<p>Vielen Dank für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538498</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Mon, 30 Jun 2008 11:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 11:57:09 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Hmm, für mich ist das ein Array aus Zeigern auf eindimensionale Float-Arrays. <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>
</blockquote>
<p>Ich wüsste nicht, was man in C++ sonst unter einem 2-dimensionalen Array verstehen sollte. <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>Tachyon schrieb:</p>
<blockquote>
<p>Ob ein Array 1, 2 oder n-dimensional ist, ist doch nur eine Sache der Abstraktion. Man kann ohne weiters n Dimensionen auf ein lineares Array abbilden, so wie es der TO tut. Durch die passendere Dimensionierung erhält es dann eben seine N Dimensionen.</p>
</blockquote>
<p>Das bestreite ich ja gar nicht, ich will nur nicht, dass Missverständnisse entstehen. Denn das Array des Threaderstellers <strong>ist</strong> eindimensional, egal was er sich darunter vorstellt <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>Sharpie schrieb:</p>
<blockquote>
<p>Das war eigentlich nicht zu Übungszwecken gedacht, welche deutlich besseren Möglichkeiten bietet mir den C++ sowas zu bewerkstelligen?</p>
</blockquote>
<p>In der STL gibt es Container wie z.B. <code>std::vector</code> (<a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">Link</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538501</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 30 Jun 2008 11:57:09 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 12:11:07 GMT]]></title><description><![CDATA[<p>Also:<br />
Erstmal ist Dein Array ja nur ein eindimensionales Array, auf das Du zwei Dimensionen abbildest. Das kopieren kann also erstmal mit normales Sprachelementen auch so gelöst werden:</p>
<pre><code class="language-cpp">for(size_t i = 0; i != (row * size); ++i)
{
    my2DArrayCopy[i] = my2DArray[i];
}
</code></pre>
<p>Dann gibt es noch die STL (Standard Template Library) mit vielen tollen Dingen, wie z.B. Containern und vorgefertigte Algorithmenschablonen für alle mögichen Anwendungsfälle.</p>
<p>Wenn Dein Interface gegeben ist, könnte die Funktion auch wie folgt aussehen:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;algorithm&gt;

void myFunction(float* my2DArray, int row, int size)
{
    std::vector&lt;float&gt; my2DArrayCopy(my2DArray, my2DArray + (row * size));

    //...

    std::copy(my2DArrayCopy.begin(), my2DArrayCopy.end(), my2DArray);
}
</code></pre>
<p>Oder besser:</p>
<pre><code class="language-cpp">void myFunction(std::vector&lt;float&gt;&amp; input)
{
    std::vector&lt;float&gt; myCopy(input);

    //...

    input = myCopy;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1538507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538507</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 30 Jun 2008 12:11:07 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 12:07:32 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Hmm, für mich ist das ein Array aus Zeigern auf eindimensionale Float-Arrays. <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>
</blockquote>
<p>Ich wüsste nicht, was man in C++ sonst unter einem 2-dimensionalen Array verstehen sollte. <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>Sowas z.B.:</p>
<pre><code class="language-cpp">float a[10][10]  //a != float**, liegt linear im Speicher.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1538510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538510</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 30 Jun 2008 12:07:32 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 12:22:48 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Sowas z.B.:</p>
<pre><code class="language-cpp">float a[10][10]  //a != float**, liegt linear im Speicher.
</code></pre>
</blockquote>
<p>Okay, da hast du Recht. Dynamisch geht's trotzdem nicht anders :p</p>
<p>Aber ich weiss nicht, ob dein Beispiel mit <code>std::copy</code> und Iteratoren den Threadersteller nicht ein wenig überfordert, wenn er noch nicht einmal <code>std::vector</code> kennt... Am Anfang ist es vielleicht besser, nur mit Indizes zu arbeiten. Da ist das Beispiel mit Kopierkonstruktor geeigneter.</p>
<p>@ Sharpie:<br />
Ich würde die Schleifenvariablen <code>i</code> und <code>j</code> in deinem ersten Code lokal (also im Schleifenkopf) deklarieren, du benötigst sie ja sonst nirgendwo.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538527</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 30 Jun 2008 12:22:48 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Mon, 30 Jun 2008 12:26:39 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Sowas z.B.:</p>
<pre><code class="language-cpp">float a[10][10]  //a != float**, liegt linear im Speicher.
</code></pre>
</blockquote>
<p>Okay, da hast du Recht. Dynamisch geht's trotzdem nicht anders :p</p>
</blockquote>
<p>Dann schau die mal boosts multiarray an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538531</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 30 Jun 2008 12:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Tue, 01 Jul 2008 08:31:51 GMT]]></title><description><![CDATA[<p>Noch einmal vielen Dank für die tollen Tipps und die Beteiligung an diesem Beitrag.</p>
<p>Vector und co sind mir schon bekannt, vielleicht sollte ich an dieser Stelle mal genauer erklären, was ich vorhabe. Ich benötige das eindimensionale Array, auf dem zwei Dimensionen abgebildet sind in einem</p>
<pre><code class="language-cpp">vector&lt; map&lt;string,float&gt; &gt; myMap
</code></pre>
<p>Mein Array sieht z.B. so aus, wobei ein Datensatz drei Felder belegt:<br />
12,5,0,30,22,0</p>
<p>Jeder Datensatz soll in eine map gepackt werden:<br />
Datensatz1: myMap[&quot;value_a&quot;]=12; myMap[&quot;value_b&quot;]=5; myMap[&quot;sum&quot;]=0;<br />
Datensatz2: myMap[&quot;value_a&quot;]=30; myMap[&quot;value_b&quot;]=22; myMap[&quot;sum&quot;]=0;</p>
<p>Damit ich zum Schluss einen Vector mit allen Datensätzen habe. Diesen Vektor kann ich dann verarbeiten und anschlißend soll dieser bzw. die Datensätze zurück in das eindimensionale Array geschrieben werden.</p>
<p>Das eindimensionale Array wird deshalb benötigt, weil diese Daten aus einer anderen Software so übergeben werden.</p>
<p>Habt ihr eine Idee wie das ganze besser zu lösen ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538955</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Tue, 01 Jul 2008 08:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Tue, 01 Jul 2008 09:12:14 GMT]]></title><description><![CDATA[<p>Für potentielle Tips würden noch ein paar Infos bezüglich der geplanten Verarbeitung hilfreich sein. Was genau soll denn mit dem <code>vector&lt;map&lt;string,float&gt; &gt;</code> gemacht werden?<br />
Wieso packst Du die Daten noch einmal extra in eine Map? Wenn es pro Vektor-Element immer drei gleiche Elemente mit gleichem Key sind, muss das nicht unbedingt sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538983</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 01 Jul 2008 09:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Tue, 01 Jul 2008 09:38:08 GMT]]></title><description><![CDATA[<p>Für jeden Datensatz also eine Map wird eine Berechnung durchgeführt. Wobei über die Feldbezeichnung also den Key(String) auf den entsprechenden Wert zugegriffen wird.</p>
<p>Dies war nur ein kleines Beispiel mit den drei Werten um die Vorgehensweise zu verdeutlichen, in der Software befinden sich in einer Map ca. 65 Werten.</p>
<p>Sind diese Informationen für potentielle Tipps ausreichend, oder gibt es noch Fragen dazu?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538995</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Tue, 01 Jul 2008 09:38:08 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Tue, 01 Jul 2008 10:04:16 GMT]]></title><description><![CDATA[<p>Kannst Du vielleicht mal ein Codeschnippsel für die Berechnung posten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539016</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 01 Jul 2008 10:04:16 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Tue, 01 Jul 2008 11:56:41 GMT]]></title><description><![CDATA[<p>Klar kann ich ein Beispiel Posten, aber nur sehr stark vereinfacht. Da steht jetzt keine besondere Logik dahinter, es ist viel mehr eine grobe Struktur der Berechnung, also bitte nicht so sonderlich auf die Keys in der Map oder ähnliches achten. Ich hoffe das Hilft weiter, wenn nicht gebe ich gerne weitere Auskünfte dazu.</p>
<pre><code class="language-cpp">float MyClass::calculate(vector&lt; map&lt;string,float&gt; &gt; myVector)
{	
	int i=0, j=0;
	float fltResult=0;

	//Reihenfolge der Datzensätze bestimmen
	for(i = myVector.size()-1; i&gt;=1; i--)
	{
		for(j=0; j&lt;i; j++)
		{
			if(myVector[j][&quot;value_a&quot;]&lt;myVector[j+1][&quot;value_a&quot;])
			{
				myVector.swap(myVector[j+1],myVector[j]);
			}
		}
	}

	//Anfangswerte ermitteln
	float fltA = getAddition(myVector[0][&quot;value_a&quot;]);
	float fltSum = getAddition(myVector[0][&quot;sum&quot;]);
	float fltDecrease = getDecrease(myVector[0][&quot;decrease&quot;]);

	//Berechnung durchführen
	for (i=1; i&lt;myVector.size(); i++){
		fltDecrease = getDecrease(myVector[i][&quot;decrease&quot;], fltDecrease);

		if(myVector[i][&quot;value_h&quot;]&gt;85){
			fltDecrease = fltDecrease+myVector[i][&quot;value_y&quot;];
			fltSum = fltSum-myVector[i][&quot;value_h&quot;];
		}

		fltResult = fltSum+myVector[i][&quot;value_d&quot;]*(myVector[i][&quot;value_g&quot;]-myVector[i][&quot;value_d&quot;])-fltA;
		fltA = fltA-myVector[i][&quot;value_i&quot;];

		myVector[i][&quot;value_a&quot;] = myVector[i][&quot;value_h&quot;]+(myVector[i][&quot;value_v&quot;]/3)
	}

	return fltResult;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1539072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539072</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Tue, 01 Jul 2008 11:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Tue, 01 Jul 2008 13:00:43 GMT]]></title><description><![CDATA[<p>Also, ich würde auf die Map verzichten, und es vielleicht eher so machen:</p>
<pre><code class="language-cpp">struct CalcDataElem
{
    float value_a;
    float value_d;
    float value_g;
    float value_h;
    float value_i;
    float value_v;
    float value_y;
    float decrease;
    float sum;
};

typedef std::vector&lt;CalcDataElem&gt; CalcData;

//...

float MyClass::calculate(CalcData myVector) //original nicht aendern-&gt;pass by value
{
    //Funktor sortiert nach value_a
    struct SortBy_value_a
    {
        bool operator()(const CalcDataElem&amp; L, const CalcDataElem&amp; R)
        {   return L.value_a &lt; R.value_a;   }
    } value_aSorter;

    //sortieren
    std::sort(myVector.begin(), myVector.end(), value_aSorter);

    const float SpecialCase = 85.0f;   //Magic Numbers sind Mist! Sprechende Namen benutzen
    const float SpecialDivider = 3.0f; //s.o.

    CalcData::iterator iter = myVector.begin();
    float result           = 0.0f; 
    float currentValueA    = iter-&gt;value_a;  //ich weiss nicht, was getAddition tut, daher direkt myVector[0].value_a
    float currentSum       = iter-&gt;sum;      //s.o.
    float currentDecrease  = iter-&gt;decrease; //s.o. nur fuer getDecrease

    while( iter != myVector.end() )
    {
        currentDecrease = getDecrease(iter-&gt;decrease, currentDecrease);
        if(iter-&gt;value_h &gt; SpecialCase)
        {
            currentDecrease += iter-&gt;value_y;
            currentSum      -= iter-&gt;value_h;
        }
        result = currentSum + iter-&gt;value_d * (iter-&gt;value_g - iter-&gt;value_d) - currentValueA;
        currentValueA -= iter-&gt;value_i;
        iter-&gt;value_a = iter-&gt;value_h + (iter-&gt;value_v / SpecialDivider);
        ++iter;
    }
    return result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1539107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539107</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 01 Jul 2008 13:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Tue, 01 Jul 2008 14:30:50 GMT]]></title><description><![CDATA[<p>Hallo Tachyon,</p>
<p>sieht professionell aus und gefällt mir sehr gut. Ich werde es mal so versuchen und gebe dann eine entsprechende Rückmeldung, kann aber ein paar Tage. Vielen Dank aber schon einmal für die Mühe und das tolle Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539170</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Tue, 01 Jul 2008 14:30:50 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Wed, 02 Jul 2008 11:02:03 GMT]]></title><description><![CDATA[<p>Wenn ich das ganze richtig sehe, muss sich:</p>
<pre><code class="language-cpp">//Funktor sortiert nach value_a
static struct SortBy_value_a
{
	bool operator()(const CalcDataElem&amp; L, const CalcDataElem&amp; R)
	{   return L.value_a &lt; R.value_a;   }
} value_aSorter;
</code></pre>
<p>außerhalb der Funktion befinden und mit einem &quot;static&quot; erweitert werden, sonst erhalte ich einen Kompiler-Fehler.</p>
<p>Sonst funktioniert alles bestens und habe einen großen Teil der Software bereits umgestellt, nochmal vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539596</guid><dc:creator><![CDATA[Sharpie]]></dc:creator><pubDate>Wed, 02 Jul 2008 11:02:03 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Wed, 02 Jul 2008 11:10:46 GMT]]></title><description><![CDATA[<p>Sharpie schrieb:</p>
<blockquote>
<p>Wenn ich das ganze richtig sehe, muss sich:</p>
<pre><code class="language-cpp">//Funktor sortiert nach value_a
static struct SortBy_value_a
{
	bool operator()(const CalcDataElem&amp; L, const CalcDataElem&amp; R)
	{   return L.value_a &lt; R.value_a;   }
} value_aSorter;
</code></pre>
<p>außerhalb der Funktion befinden und mit einem &quot;static&quot; erweitert werden, sonst erhalte ich einen Kompiler-Fehler.</p>
<p>Sonst funktioniert alles bestens und habe einen großen Teil der Software bereits umgestellt, nochmal vielen Dank!</p>
</blockquote>
<p>Nö, eigentlich darf es in der Funktion stehen. Was sagt der Compiler denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539600</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 02 Jul 2008 11:10:46 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Wed, 02 Jul 2008 12:19:16 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Sharpie schrieb:</p>
<blockquote>
<p>Wenn ich das ganze richtig sehe, muss sich:</p>
<pre><code class="language-cpp">//Funktor sortiert nach value_a
static struct SortBy_value_a
{
	bool operator()(const CalcDataElem&amp; L, const CalcDataElem&amp; R)
	{   return L.value_a &lt; R.value_a;   }
} value_aSorter;
</code></pre>
<p>außerhalb der Funktion befinden und mit einem &quot;static&quot; erweitert werden, sonst erhalte ich einen Kompiler-Fehler.</p>
<p>Sonst funktioniert alles bestens und habe einen großen Teil der Software bereits umgestellt, nochmal vielen Dank!</p>
</blockquote>
<p>Nö, eigentlich darf es in der Funktion stehen. Was sagt der Compiler denn?</p>
</blockquote>
<p>Die Klasse muss außerhalb der Funktion definiert sein.<br />
, denn lokale Klassen dürfen nicht Templateargument sein (und der sort-Aufruf deduziert ja die Klasse aus dem Argument). Wo das Objekt allerdings definiert wird, ist unerheblich. static ist unnötig, im Zweifelsfall wäre ein anonymer Namensraum vorzuziehen. Falls die Funktion calculate allerdings inline im Header definiert ist, und value_aSorter auf Namensraumebene definiert wird, darf es weder static sein, noch sich in einem anonymen Namensraum befinden, sonst wird die ODR verletzt. Am sinnvollsten und üblich dürfte immer noch sein, das Vergleichsobjekt temporär direkt beim sort-Aufruf zu erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539658</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 Jul 2008 12:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Wed, 02 Jul 2008 12:24:35 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Die Klasse muss außerhalb der Funktion definiert sein.<br />
, denn lokale Klassen dürfen nicht Templateargument sein (und der sort-Aufruf deduziert ja die Klasse aus dem Argument). Wo das Objekt allerdings definiert wird, ist unerheblich. static ist unnötig, im Zweifelsfall wäre ein anonymer Namensraum vorzuziehen. Falls die Funktion calculate allerdings inline im Header definiert ist, und value_aSorter auf Namensraumebene definiert wird, darf es weder static sein, noch sich in einem anonymen Namensraum befinden, sonst wird die ODR verletzt. Am sinnvollsten und üblich dürfte immer noch sein, das Vergleichsobjekt temporär direkt beim sort-Aufruf zu erzeugen.</p>
</blockquote>
<p><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="😕"
    /><br />
Der Typ wird doch nicht aus der Prädikaten-Klasse deduziert, sondern aus dem Iteratoren-Typ.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539665</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 02 Jul 2008 12:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Wed, 02 Jul 2008 12:27:51 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p><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="😕"
    /><br />
Der Typ wird doch nicht aus der Prädikaten-Klasse deduziert, sondern aus dem Iteratoren-Typ.</p>
</blockquote>
<p>Der Iterator-Typ wird wohl aus dem Iterator deduziert. Der Typ des Prädikats hat aber mit dem Iterator wenig zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539667</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 02 Jul 2008 12:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Wed, 02 Jul 2008 12:28:00 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Der Typ wird doch nicht aus der Prädikaten-Klasse deduziert, sondern aus dem Iteratoren-Typ.</p>
</blockquote>
<pre><code class="language-cpp">template&lt;class RandomAccessIterator, class Compare&gt;
void sort(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1539668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539668</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 Jul 2008 12:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionales Array kopieren on Wed, 02 Jul 2008 12:57:59 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Der Typ wird doch nicht aus der Prädikaten-Klasse deduziert, sondern aus dem Iteratoren-Typ.</p>
</blockquote>
<pre><code class="language-cpp">template&lt;class RandomAccessIterator, class Compare&gt;
void sort(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
</code></pre>
</blockquote>
<p>Jo, habs auch gerade unter 14.3.1 §2 gefunden. Und Comeau und g++ schlucken das auch einleuchtenderweise tatsächlich nicht.<br />
MSVC 2008 allerdings schon...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539691</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 02 Jul 2008 12:57:59 GMT</pubDate></item></channel></rss>