<?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[Performant einen batch von arrays halten, aktualisieren, ...]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ein Logserver soll von einem Logclienten ständig Daten per IPC (SharedMemory &amp; Events) bekommen.<br />
Der Logclient kann dabei crashen, der Logserver soll dann die letzten empfangenen Daten haben.</p>
<p>Jedoch soll der Logserver nur maximal 10 Datenblöcke (zu je 128 Byte) halten, wenn ein neuer Block ankommt, soll der Älteste verworfen und der Neue angehängt werden.</p>
<p>Ich dachte zunächst an std::deque, ABER:<br />
Ich möchte so wenig wie nur möglich rumkopieren. Bestenfalls genau ein memcpy, nämlich vom SharedMemory in den batch.</p>
<p>Wichtig ist: Ohne Zeiger, denn es wird erwartet dass der Logclient crasht und genau dann möchte ich die letzten empfangenen Daten im Logserver haben!</p>
<p>Gibts da was Vorgefertigtes?</p>
<p>So sieht der Aufruf derzeit aus:</p>
<pre><code class="language-cpp">unsigned char data[128];

while(true)
    logSrv.read(data, sizeof(data));

// data möchte ich in einem batch von 10 arrays haben
</code></pre>
<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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226462/performant-einen-batch-von-arrays-halten-aktualisieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 18:59:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226462.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Nov 2008 15:37:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 15:37:55 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ein Logserver soll von einem Logclienten ständig Daten per IPC (SharedMemory &amp; Events) bekommen.<br />
Der Logclient kann dabei crashen, der Logserver soll dann die letzten empfangenen Daten haben.</p>
<p>Jedoch soll der Logserver nur maximal 10 Datenblöcke (zu je 128 Byte) halten, wenn ein neuer Block ankommt, soll der Älteste verworfen und der Neue angehängt werden.</p>
<p>Ich dachte zunächst an std::deque, ABER:<br />
Ich möchte so wenig wie nur möglich rumkopieren. Bestenfalls genau ein memcpy, nämlich vom SharedMemory in den batch.</p>
<p>Wichtig ist: Ohne Zeiger, denn es wird erwartet dass der Logclient crasht und genau dann möchte ich die letzten empfangenen Daten im Logserver haben!</p>
<p>Gibts da was Vorgefertigtes?</p>
<p>So sieht der Aufruf derzeit aus:</p>
<pre><code class="language-cpp">unsigned char data[128];

while(true)
    logSrv.read(data, sizeof(data));

// data möchte ich in einem batch von 10 arrays haben
</code></pre>
<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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608594</guid><dc:creator><![CDATA[Anfänger04@AufEinNeues]]></dc:creator><pubDate>Sat, 01 Nov 2008 15:37:55 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 15:46:03 GMT]]></title><description><![CDATA[<p>Anfänger04@AufEinNeues schrieb:</p>
<blockquote>
<p>Ich dachte zunächst an std::deque, ABER:<br />
Ich möchte so wenig wie nur möglich rumkopieren.</p>
</blockquote>
<p>Du meinst wohl <code>std::queue</code> ? Da kann man auch <code>std::list</code> als zugrunde liegenden Container haben, damit hast du keine Kopier- und Zuweisungsoperationen.</p>
<p>Anfänger04@AufEinNeues schrieb:</p>
<blockquote>
<p>Bestenfalls genau ein memcpy, nämlich vom SharedMemory in den batch.</p>
</blockquote>
<p>Du solltest dir die C-Funktionen langsam abgewöhnen. In C++ gibts dafür <code>std::copy()</code> .</p>
<p>Anfänger04@AufEinNeues schrieb:</p>
<blockquote>
<p>Wichtig ist: Ohne Zeiger, denn es wird erwartet dass der Logclient crasht und genau dann möchte ich die letzten empfangenen Daten im Logserver haben!</p>
</blockquote>
<p>Das versteh ich jetzt nicht ganz. Inwiefern ist es relevant, ob Zeiger vorhanden sind oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608598</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 01 Nov 2008 15:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 15:51:38 GMT]]></title><description><![CDATA[<p>Der LogServer muss, sobald Daten angekommen sind, diese in seinen batch KOPIEREN.<br />
Aber stimmt schon, Zeiger auf dynamischen Speicher können es natürlich sein, nur nicht Zeiger auf Daten, die nach einem crash von LogClient nicht mehr verfügbar sind.</p>
<p>Nochmals in Kurz:<br />
LogServer soll 10 Datenblöcke zu je 128 Byte halten. Kommt ein 11. Datenblock an, wird der älteste Datenblock gelöscht und der 11. angehängt.<br />
Wenn LogClient unerwartet beendet wird, soll LogServer trotzdem noch alle empfangenen Daten haben.</p>
<p>Wichtig ist nur, dass nicht mehr als eine Kopieroperation stattfindet.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608602</guid><dc:creator><![CDATA[Anfänger04@Erklärung]]></dc:creator><pubDate>Sat, 01 Nov 2008 15:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 16:02:29 GMT]]></title><description><![CDATA[<p>Aber was spricht dann gegen eine <code>std::queue&lt;Datenblock, std::list&lt;Datenblock&gt; &gt;</code> ?</p>
<p>Da findet gar keine Kopieraktion statt, nur ein Konstruktoraufruf beim neuen und ein Destruktoraufruf beim ältesten Element.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608607</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 01 Nov 2008 16:02:29 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 16:21:59 GMT]]></title><description><![CDATA[<p>Wie jetzt?</p>
<p>Also, so weit ich dich verstanden habe, würde ich das so machen:</p>
<pre><code class="language-cpp">int const MAX_BLOCKS_INDEX = 9;

typedef std::tr1::array&lt;char, 128&gt; DataBlock;
typedef std::tr1::array&lt;DataBlock, MAX_BLOCKS_INDEX + 1&gt; DataBlocks;

DataBlocks dataBlocks;
int current = MAX_BLOCKS_INDEX;

while(true) // oder was auch immer
{
  if(current == MAX_BLOCKS_INDEX)
  { current = 0; }
  else
  { ++current; }

  logSrv.read(&amp;dataBlocks[current][0], dataBlocks[current].size());

  // ...
}

// ...
</code></pre>
<p>Falls keine tr1 Unterstützung vorhanden ist, kann man auch Boost.Array verwenden. Und am besten kapselt man sowas natürlich in eine Klasse <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>(Edit: Nur ein paar Dinge &quot;verschönert&quot; ...)</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608610</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 01 Nov 2008 16:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 16:23:16 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Aber was spricht dann gegen eine <code>std::queue&lt;Datenblock, std::list&lt;Datenblock&gt; &gt;</code> ?</p>
</blockquote>
<p>Was passiert da genau?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a><br />
Es soll so aktualisiert werden:</p>
<pre><code>-recv-&gt;

0	0	0	1	2	3
0	0	1	2	3	4
0	1	2	3	4	5
</code></pre>
<p>Und zum Schluss hätte man dann die letzten drei empfangenen Arrays:<br />
3: { 1, 2, 3, ..., 128 }<br />
4: { 1, 2, 3, ..., 128 }<br />
5: { 1, 2, 3, ..., 128 }</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608624</guid><dc:creator><![CDATA[Anfänger04@AllesChillig]]></dc:creator><pubDate>Sat, 01 Nov 2008 16:23:16 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 16:28:34 GMT]]></title><description><![CDATA[<p>Anfänger04@AllesChillig schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a><br />
Es soll so aktualisiert werden:</p>
<pre><code>-recv-&gt;

0	0	0	1	2	3
0	0	1	2	3	4
0	1	2	3	4	5
</code></pre>
<p>Und zum Schluss hätte man dann die letzten drei empfangenen Arrays:<br />
3: { 1, 2, 3, ..., 128 }<br />
4: { 1, 2, 3, ..., 128 }<br />
5: { 1, 2, 3, ..., 128 }</p>
</blockquote>
<p>Ich verstehe nur Bahnhof. Vielleicht ein paar Worte mehr wären nicht schlecht ...<br />
Was stimmt an meiner Lösung genau nicht? Die Reihenfolge, wie die Blöcke empfangen werden? Das könntest du ja auch selber noch abändern ...</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608628</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 01 Nov 2008 16:28:34 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 16:41:44 GMT]]></title><description><![CDATA[<p>Anfänger04@AllesChillig schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Aber was spricht dann gegen eine <code>std::queue&lt;Datenblock, std::list&lt;Datenblock&gt; &gt;</code> ?</p>
</blockquote>
<p>Was passiert da genau?</p>
</blockquote>
<p>Eigentlich das, was du geschrieben hast:</p>
<pre><code>0	0	0	1	2	3
0	0	1	2	3	4
0	1	2	3	4	5
</code></pre>
<p>Eine Queue ist eine FIFO-Warteschlange, bei der Elemente nur von hinten angehängt und von vorne entfernt werden können. <a href="http://www.cplusplus.com/reference/stl/queue/" rel="nofollow">Mehr Informationen...</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608632</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 01 Nov 2008 16:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 16:48:06 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a><br />
Das würde dein Code machen:</p>
<p>0<br />
0<br />
0</p>
<p>Dann<br />
1<br />
0<br />
0</p>
<p>Dann<br />
1<br />
2<br />
0</p>
<p>Dann<br />
3<br />
2<br />
0</p>
<p>Dann<br />
3<br />
4<br />
0</p>
<p>...Es soll aber soooooooo sein:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;iostream&gt;
#include &lt;deque&gt;

int main()
{
	std::deque&lt;int&gt; queue(5, 0);

	for(unsigned i = 0; i &lt; 14; ++i)
	{
		system(&quot;cls&quot;);

		queue.push_back(i);
		queue.pop_front();

		for(std::deque&lt;int&gt;::iterator it = queue.begin(); it != queue.end(); ++it)
			std::cout &lt;&lt; *it &lt;&lt; std::endl;

		Sleep(500);
	}
}
</code></pre>
<p>Führt es halt mal aus, sooooo meine ich es <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Der Batch von Arrays darf natürlich nicht ein statisches Array mit fixer Größe sein, denn dann müssten ständig alle Elemente verschoben werden.</p>
<p>-&gt; Vorne wird Eins weggenommen, hinten Eins dran. Somit bleibt die Größe des Batches immer gleich, die Daten sind immer in richtiger Reihenfolge da einfach AUFGESCHOBEN wird.</p>
<p>Aber ich möchte es ja NICHT so machen:</p>
<pre><code class="language-cpp">unsigned char data[128];
logSrv.read(data, 128);
wasauchimmer.push_back(data);
</code></pre>
<p>Denn so würde schon zweimal kopiert werden.<br />
Es soll direkt wo reinkopiert werden und automatisch aufgeschoben werden.</p>
<p>Ach ich glaub das gibts einfach nicht vorgefertigt...</p>
<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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608633</guid><dc:creator><![CDATA[Anfänger04@OkNochmal]]></dc:creator><pubDate>Sat, 01 Nov 2008 16:48:06 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 16:51:40 GMT]]></title><description><![CDATA[<p>Anfänger04@OkNochmal schrieb:</p>
<blockquote>
<p>Ach ich glaub das gibts einfach nicht vorgefertigt...</p>
</blockquote>
<p>Meine Güte, wie oft willst du meinen Vorschlag noch ignorieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608636</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 01 Nov 2008 16:51:40 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 17:02:35 GMT]]></title><description><![CDATA[<p>1. Den Vorschlag von Nexus funktioniert ...<br />
2. Mein Vorschlag funktioniert genauso, nur musst du halt die Reihenfolge beachten, aber das ist doch kein Problem! Die Reihenfolge kannst du immer über die Variable <code>current</code> definieren. Und wenn du einen entsprechenden Iterator dafür brauchst, kannst du einen entsprechenden Wrapper dazu bauen, welche automatisch die richtige Reihenfolge kennt.<br />
Ich seh dein Problem nicht ... und im übrigen bleibt die letzte Stelle bei meinem Vorschlag nicht unberührt!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608643</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 01 Nov 2008 17:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 17:03:55 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Meine Güte, wie oft willst du meinen Vorschlag noch ignorieren? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Aber ich weiß doch garnicht was du meinst!<br />
Wie sollte ich mit einer std::queue ein doppeltes Kopieren verhindern?<br />
Wie ich doch vorhin schon geschrieben habe, möchte ich DAS NICHT machen:</p>
<p>unsigned char data[128];<br />
logSrv.read(data, 128);<br />
wasauchimmer.push_back(data);</p>
<p>Wie denn sonst?</p>
<p>unsigned char data[128];<br />
logSrv.read(queue.was?(), 128);</p>
<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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608647</guid><dc:creator><![CDATA[Anfänger04@Verwirrt]]></dc:creator><pubDate>Sat, 01 Nov 2008 17:03:55 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 17:09:24 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a></p>
<p>Dein Beispiel ÜBERSCHREIBT aber Werte. Es soll aber AUFGESCHOBEN werden.<br />
Du hast ein statisches Array angelegt. Wie soll denn da aufgeschoben werden? Da müsste jedes Element verschoben werden.</p>
<p>Bitte führ doch mal meinen Code aus, vorige seite Unten, das demonstriert wie die Daten gehalten werden sollen.</p>
<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="😕"
    /> <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="😕"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1608650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608650</guid><dc:creator><![CDATA[Anfänger04@Wasjetzt]]></dc:creator><pubDate>Sat, 01 Nov 2008 17:09:24 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 17:21:38 GMT]]></title><description><![CDATA[<p>Anfänger04@Wasjetzt schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a></p>
<p>Dein Beispiel ÜBERSCHREIBT aber Werte. Es soll aber AUFGESCHOBEN werden.<br />
Du hast ein statisches Array angelegt. Wie soll denn da aufgeschoben werden? Da müsste jedes Element verschoben werden.</p>
</blockquote>
<p>Mein Beispiel überschreibt Werte, das ist korrekt. Aber es überschreibt immer den ältesten Wert. Es werden, wie gefordert, immer maximal nur 10 Werte vorhanden sein. Zuerst werden sie einfach der Reihe nach reingeschrieben. Wenn man beim Letzten Ankommt, startet man wieder vorne in der Liste. Der erste Werte in der Liste, wenn der letzte beschrieben wurde, ist ja der älteste Wert.</p>
<p>So sieht es bei meinen Beispiel aus, wenn wir anstatt 10 Werte nur maximal 4 speichern würden:</p>
<pre><code>0 0 0 0 -&gt; Start: 0
1 0 0 0 -&gt; Start: 1
1 2 0 0 -&gt; Start: 2
1 2 3 0 -&gt; Start: 3
1 2 3 4 -&gt; Start: 0
5 2 3 4 -&gt; Start: 1
5 6 3 4 -&gt; Start: 2
5 6 7 4 -&gt; Start: 3
5 6 7 8 -&gt; Start: 0
usw.
</code></pre>
<p>Start gibt jeweils den Index an, wo die Liste startet. Ist der gleiche Wert, wie current und bezeichnet zudem immer den ältesten Eintrag.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608656</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 01 Nov 2008 17:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 17:26:02 GMT]]></title><description><![CDATA[<p>Du willst also so etwas:</p>
<pre><code class="language-cpp">int main() 
{ 
    std::deque&lt;int&gt; queue(5, 0); 
    for(unsigned i = 0; i &lt; 14; ++i) 
    { 
        queue.push_back(i); 
        queue.pop_front(); 

        for(std::deque&lt;int&gt;::iterator it = queue.begin(); it != queue.end(); ++it) 
            std::cout &lt;&lt; *it &lt;&lt; std::endl; 
    } 
}
</code></pre>
<p>Das ist bis auf das Iterieren auch mit einer <code>std::queue</code> möglich. Die Queue ist halt darauf beschränkt, nur Zugriff auf das vorderste und hinterste Element zu bieten.</p>
<p>Falls du iterieren musst, kannst du ja eine <code>std::list</code> verwenden. Eine doppelt verkettete Liste kopiert intern nichts, da jedes Element Zeiger auf das nächste beinhaltet. Dann könntest du ebenfalls <code>push_back()</code> und <code>pop_front()</code> (oder umgekehrt) sowie bidirektionale Iteratoren anwenden.</p>
<p>Edit: Eventuell wäre auch <em>Boost.Circular Buffer</em> etwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608657</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 01 Nov 2008 17:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sat, 01 Nov 2008 17:39:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a><br />
Nochmal, dies möchte ich verhindern:</p>
<pre><code class="language-cpp">while(true)
{
    unsigned char data[128]; 
    logSrv.read(data, 128);
}
</code></pre>
<p>Wäre schon zu viel, weil data dann nochmals irgendwohin kopiert werden müsste.<br />
Irgendwie so:</p>
<pre><code class="language-cpp">while(true)
    logSrv.read(batch.Push(), 128);
</code></pre>
<p>batch.Push() gibt einen Zeiger auf das Datenarray eines batch- Elementes zurück, welches automatisch erstellt und hinten angehängt wurde, während vorne Eins entfernt wurde.<br />
read() schreibt dann automatisch in dieses Element und fertig.</p>
<p>So soll es FUNKTIONIEREN. Irgendwie so...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608670</guid><dc:creator><![CDATA[Anfänger04@VielGeduld]]></dc:creator><pubDate>Sat, 01 Nov 2008 17:39:02 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sun, 02 Nov 2008 11:25:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Wäre schon zu viel, weil data dann nochmals irgendwohin kopiert werden müsste.</p>
</blockquote>
<p>Was wird den da kopiert? Hast du überhaupt ein Ahnung, wie Array übergeben werden?</p>
<p>Und jetzt kommt das übliche:<br />
<a href="http://en.wikipedia.org/wiki/Code_optimization#When_to_optimize" rel="nofollow">http://en.wikipedia.org/wiki/Code_optimization#When_to_optimize</a></p>
<p>Knuth, Donald schrieb:</p>
<blockquote>
<p>premature optimization is the root of all evil</p>
</blockquote>
<p>(Jemand sollte da mal einen kurzten, verständlichen Artikel dazu schreiben, dass es jeder Anfänger versteht, warum man diesen Mist lassen sollte.)</p>
<p>Ansonsten suchst du wahrscheinlich am ehesten das hier:<br />
<a href="http://www.cplusplus.com/reference/misc/iterator/back_inserter.html" rel="nofollow">http://www.cplusplus.com/reference/misc/iterator/back_inserter.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608888</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 02 Nov 2008 11:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to Performant einen batch von arrays halten, aktualisieren, ... on Sun, 02 Nov 2008 11:39:10 GMT]]></title><description><![CDATA[<p>Und was ist jetzt eigentlich an meiner Lösung falsch?</p>
<p>Ansonsten ist wirklich Boost.Circular zu empfehlen. Da gibt es zwar auch eine Kopie, aber was ist daran so extrem schlimm? 128 Bytes sind in 0.0000000000000...00000000000000001 ms kopiert.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1608898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1608898</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 02 Nov 2008 11:39:10 GMT</pubDate></item></channel></rss>