<?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[istream, eine zeile zurück springen[gelöst]]]></title><description><![CDATA[<p>Ahoi,</p>
<p>ich will wenn ich mit meinem eingabestrom etwas gefunden habe die Zeile davor nochmal lesen.<br />
Ich könnte natürlich auch immer die zeile davor zwischenspeichern aber das würde bei großen Dateien viel Zeit kosten.</p>
<p>Jetzt hab ich mir mal das istream Objekt angeguckt. Ich denke das mich die Methoden</p>
<p>tellg Get position of the get pointer. (public member function)<br />
seekg Set position of the get pointer (public member function)</p>
<p>weiter bringen.<br />
Aber wie ich die genau anweden soll weiß ich nicht ^^...</p>
<p>Gruß Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271356/istream-eine-zeile-zurück-springen-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 12:13:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271356.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Jul 2010 08:42:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 12:44:05 GMT]]></title><description><![CDATA[<p>Ahoi,</p>
<p>ich will wenn ich mit meinem eingabestrom etwas gefunden habe die Zeile davor nochmal lesen.<br />
Ich könnte natürlich auch immer die zeile davor zwischenspeichern aber das würde bei großen Dateien viel Zeit kosten.</p>
<p>Jetzt hab ich mir mal das istream Objekt angeguckt. Ich denke das mich die Methoden</p>
<p>tellg Get position of the get pointer. (public member function)<br />
seekg Set position of the get pointer (public member function)</p>
<p>weiter bringen.<br />
Aber wie ich die genau anweden soll weiß ich nicht ^^...</p>
<p>Gruß Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932409</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 12:44:05 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 08:49:07 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>Ich könnte natürlich auch immer die zeile davor zwischenspeichern aber das würde bei großen Dateien viel Zeit kosten.</p>
</blockquote>
<p>Wie kommst Du denn darauf?</p>
<pre><code class="language-cpp">string alt;
string neu;
while (getline(is,alt)) {
  alt.swap(neu);
  // neu ist die neue Zeile
  // alt ist die Zeile davor
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1932412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932412</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 27 Jul 2010 08:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 08:54:56 GMT]]></title><description><![CDATA[<p>ich will eigentlich nciht groß rum diskutieren sondern nur ne lösung für mein problem, aber hab ich jetzt nicht für jede zeile die ich einlese eine zusätzliche vertauschung von zwei strings?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932416</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 08:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 08:58:44 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>ich will eigentlich nciht groß rum diskutieren sondern nur ne lösung für mein problem, aber hab ich jetzt nicht für jede zeile die ich einlese eine zusätzliche vertauschung von zwei strings?</p>
</blockquote>
<p>Hast Du es mal so probiert? Woher weisst Du, dass &quot;viel Zeit kosten würde&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932417</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 27 Jul 2010 08:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 08:59:53 GMT]]></title><description><![CDATA[<p>Jungejunge, du brauchst Hilfe für eine Funktion, die keinen bzw. einen oder zwei Parameter erwartet? Ist das dein Ernst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932418</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 27 Jul 2010 08:59:53 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 09:00:53 GMT]]></title><description><![CDATA[<p>Du musst mit seekg an die Position springen, an der die letzte Zeile begonnen hat, oder zeichenweise rückwärts bis zum letzten '\n' lesen. Eine Funktion zum Rückwärtslesen von Zeilen gibt es nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932419</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 27 Jul 2010 09:00:53 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 09:04:53 GMT]]></title><description><![CDATA[<p>Du hast behauptet, dass das Zwischenspeichern viel Zeit kostet und weniger effizient als das Zurückspringen und neu Einlesen ist. Das sehe ich jetzt nicht ein. Deswegen die Frage: &quot;Wie kommst Du darauf?&quot;</p>
<p>Rustyspoon schrieb:</p>
<blockquote>
<p>aber hab ich jetzt nicht für jede zeile die ich einlese eine zusätzliche vertauschung von zwei strings?</p>
</blockquote>
<p>Ja und? Das ist eine sehr billige Operation.</p>
<p>Alternativ könnte man es so machen:</p>
<pre><code class="language-cpp">string zeilen[2];
for (int aktuell=0; getline(is,zeilen[aktuell]); aktuell^=1) {
  // zeilen[aktuell]   &lt;-- zuletzt gelesen
  // zeilen[aktuell^1] &lt;-- die davor
}
</code></pre>
<p>Das ist <em>vielleicht</em> ein paar Nanosekunden schneller als das davor.<br />
Kannste ja mal testen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932421</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 27 Jul 2010 09:04:53 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 09:05:19 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Du musst mit seekg an die Position springen, an der die letzte Zeile begonnen hat, oder zeichenweise rückwärts bis zum letzten '\n' lesen. Eine Funktion zum Rückwärtslesen von Zeilen gibt es nicht.</p>
</blockquote>
<p>ich will die zeile davor nochmal lesen nicht die selbe zeile nochmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932423</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 09:05:19 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 09:08:50 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>ich will eigentlich nciht groß rum diskutieren sondern nur ne lösung für mein problem, aber hab ich jetzt nicht für jede zeile die ich einlese eine zusätzliche vertauschung von zwei strings?</p>
</blockquote>
<p>Ja, aber die Vertauschung ist kostenlos (fast).<br />
Edit: moment mal, der war gut. Du ziehst ernsthaft ein Zurückspringen und neu einlesen einer Stringvertauschung vor? Das Vertauschen dürfte dich drei CPU-Instruktionen kosten, deine Idee kostet dich höchstwahrscheinlich hunderte bis tausende Zyklen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932424</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 27 Jul 2010 09:08:50 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 09:08:19 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Du hast behauptet, dass das Zwischenspeichern viel Zeit kostet und weniger effizient als das Zurückspringen und neu Einlesen ist. Das sehe ich jetzt nicht ein. Deswegen die Frage: &quot;Wie kommst Du darauf?&quot;</p>
<p>Rustyspoon schrieb:</p>
<blockquote>
<p>aber hab ich jetzt nicht für jede zeile die ich einlese eine zusätzliche vertauschung von zwei strings?</p>
</blockquote>
<p>Ja und? Das ist eine sehr billige Operation.</p>
<p>Alternativ könnte man es so machen:</p>
<pre><code class="language-cpp">string zeilen[2];
for (int aktuell=0; getline(is,zeilen[aktuell]); aktuell^=1) {
  // zeilen[aktuell]   &lt;-- zuletzt gelesen
  // zeilen[aktuell^1] &lt;-- die davor
}
</code></pre>
<p>Das ist <em>vielleicht</em> ein paar Nanosekunden schneller als das davor.<br />
Kannste ja mal testen...</p>
</blockquote>
<p>ich verstehe die forschleife schon nicht :&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932428</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 09:08:19 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 09:08:52 GMT]]></title><description><![CDATA[<p>So könnte es zwar klappen, ist aber mindestens genauso teuer wie Strings zu swappen.</p>
<pre><code class="language-cpp">std::string line;
std::getline(input_stream, line);
std::streambuf* buffer = input_stream.rdbuf();
buffer-&gt;pubseekpos(std::ios::beg);
buffer-&gt;sputn(line.c_str(), line.size());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1932430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932430</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Tue, 27 Jul 2010 09:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 09:24:19 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<p>Rustyspoon schrieb:</p>
<blockquote>
<p>ich will eigentlich nciht groß rum diskutieren sondern nur ne lösung für mein problem, aber hab ich jetzt nicht für jede zeile die ich einlese eine zusätzliche vertauschung von zwei strings?</p>
</blockquote>
<p>Ja, aber die Vertauschung ist kostenlos (fast).<br />
Edit: moment mal, der war gut. Du ziehst ernsthaft ein Zurückspringen und neu einlesen einer Stringvertauschung vor? Das Vertauschen dürfte dich drei CPU-Instruktionen kosten, deine Idee kostet dich höchstwahrscheinlich hunderte bis tausende Zyklen.</p>
</blockquote>
<p>wo ist denn der unterschied zwischen dem speichern und dem tauschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932436</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 09:24:19 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 09:46:27 GMT]]></title><description><![CDATA[<p>&quot;Speichern&quot; zerstört den alten String (intern) und kopiert einen anderen an dessen Stelle. Beim Vertauschen werden die lediglich die internen Zeiger getauscht und fertig.</p>
<p>Ich habe das kurz getestet: Vertauschen kostet bei mir etwa 20 CPU-Zyklen pro Zeile, Zurückspringen und neueinlesen kostet ~14.200 Zyklen pro Zeile.</p>
<p>Insgesamt ist dieser Ansatz 50 mal langsamer als wenn du die letzte Zeile zwischenspeicherst (26 ms vs. 1320 ms für 274817 Zeilen in 2,7 MiB).<br />
So viel zu &quot;würde bei großen Dateien viel Zeit kosten&quot; :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932449</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 27 Jul 2010 09:46:27 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 10:00:39 GMT]]></title><description><![CDATA[<p>Je nachdem, wie string bzw string::swap implementiert ist, ist das mit dem string-array von Seite 1 eventuell noch besser Laufzeit-technisch. Beim GCC ist string::swap schon super schnell. Bei MSVC meines Wissens nach etwas aufwändiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932466</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 27 Jul 2010 10:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 10:01:28 GMT]]></title><description><![CDATA[<p>die Datei die ich habe ist 20 mb groß und hat ca 2,5 mio zeilen. Außerdem könenn die Dateien auch noch größer werden. Desshalb ist es für mich schwer vorstellbar, dass es günstiger ist 2,5mio mal zu tauschen/speichern. Anstatt ein einziges mal, eine zeile zurück zu springen.<br />
Ich hab den effekt von dem tauschen auch noch immer nicht genau verstanden.</p>
<p>Ich verstehe das so, dass beim tauschen der zusätzliche aufwand pro zeile zwei adress/zeiger vertauschungen ist und absolut ein String an speicher mehr gebraucht wird,</p>
<p>Bei zwischenspeichern ist der Absolute aufwand gleich aber bei jeder zeile muss eine komplette Copiraktion des inhaltes durchgeführt werden?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932467</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 10:01:28 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 10:04:45 GMT]]></title><description><![CDATA[<p>Vorschlag zur Güte: Implementier´ beides und miss was schneller ist. Kannst deine Ergebnisse ja anschließend hier mitteilen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932468</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 27 Jul 2010 10:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 10:12:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich verstehe das so, dass beim tauschen der zusätzliche aufwand pro zeile zwei adress/zeiger vertauschungen ist und absolut ein String an speicher mehr gebraucht wird,</p>
</blockquote>
<p>Soweit richtig, der zusätzliche Speicherverbrauch ist aber irrelevant...</p>
<blockquote>
<p>Bei zwischenspeichern ist der Absolute aufwand gleich aber bei jeder zeile muss eine komplette Copiraktion des inhaltes durchgeführt werden?</p>
</blockquote>
<p>Vertauschen=Zwischenspeichern bei krümelkackers Variante.</p>
<p>... wie dem auch sei, wenn du tatsächlich nur <em>ein einziges Mal</em> in Verlauf des ganzen Einlesevorgangs zurückspringen musst, dann ist das schon ab nur 7.000 Zeilen die bessere Lösung. Eine Ausnahme liegt vor, wenn Seeking bei der Datei nicht möglich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932470</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 27 Jul 2010 10:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 10:21:51 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<p>... wie dem auch sei, wenn du tatsächlich nur <em>ein einziges Mal</em> in Verlauf des ganzen Einlesevorgangs zurückspringen musst, dann ist das schon ab nur 7.000 Zeilen die bessere Lösung. Eine Ausnahme liegt vor, wenn Seeking bei der Datei nicht möglich ist.</p>
</blockquote>
<p>Da wäre ich mir nicht so sicher, vermutlich dauert beides ungefähr gleich lang, die Rückspringvariante jedoch ein paar Takte länger.</p>
<p>Bedenke, dass Ein-/Ausgabe mit Abstand das langsamste ist, was im Computer abläuft. Die Stringoperation ist jedoch extrem schnell. Vermutlich wird das Programm die meiste Zeit auf die Datei warten. Ob es während des Wartens noch 20 Takte für Stringvertauschung benutzt macht die Dateioperation nicht schneller oder langsamer. Der einmalige Rücksprung wird natürlich Zeit kosten, aber einmal Springen bei zigtausenden Zeilen dürfte insgesamt nicht viel ausmachen.</p>
<p>Das wäre natürlich anders, wenn die Daten schon im Speicher lägen, also beispielsweise wenn aus einem Stringstream gelesen würde.</p>
<p>P.S.: @Threadersteller: Eine 20 MB Datei und du machst dir Sorgen um die Lesegeschwindigkeit? Programmierst du für C64?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932474</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 27 Jul 2010 10:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 10:24:22 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>Desshalb ist es für mich schwer vorstellbar, dass es günstiger ist 2,5mio mal zu tauschen/speichern.</p>
</blockquote>
<p>Das gute beim Computer ist, dass man sich solche Sachen nicht vorstellen muss, sondern es einfach ausprobieren kann. Die Zeit, die du hier mit herumkritteln an einer funktionierenden Lösung aus abergläubischen Gründen verplemperst, könntest du besser genutzt haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932478</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Tue, 27 Jul 2010 10:24:22 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 10:28:36 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>P.S.: @Threadersteller: Eine 20 MB Datei und du machst dir Sorgen um die Lesegeschwindigkeit? Programmierst du für C64?</p>
</blockquote>
<p>wie ich sagte, die könne auch größer sein. außerdem interessiert es mich auch einfach so allgemein.</p>
<p>btw.<br />
swapen und ueberschreiben spart tatsächlich etwas zeit. wie das mit dem zurückspringen geht habe ich noch nicht verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932480</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 10:28:36 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 10:38:03 GMT]]></title><description><![CDATA[<p>Ich ging von allen Betrachtungen davon aus, dass sich die Datei ohnehin schon vollständig im Filecache befindet. Muss zwar nicht der Fall sein, aber:</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Der einmalige Rücksprung wird natürlich Zeit kosten, aber einmal Springen bei zigtausenden Zeilen dürfte insgesamt nicht viel ausmachen.</p>
</blockquote>
<p>Eben.</p>
<p>Moment mal: bei der Zurückspringvariante muss man sich beim Einlesen einer neuen Zeile die Position der alten merken - das tellg() kostet auch wieder mehrere tausend Zyklen pro Zeile.</p>
<p>Gut, dann unterm Strich:<br />
Vergiss das mit dem Zurückspringen einfach.<br />
Letzte Zeile merken ist in allen Lebenslagen besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932487</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 27 Jul 2010 10:38:03 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 11:37:34 GMT]]></title><description><![CDATA[<p>Athar schrieb:</p>
<blockquote>
<p>Ich ging von allen Betrachtungen davon aus, dass sich die Datei ohnehin schon vollständig im Filecache befindet. Muss zwar nicht der Fall sein, aber:</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Der einmalige Rücksprung wird natürlich Zeit kosten, aber einmal Springen bei zigtausenden Zeilen dürfte insgesamt nicht viel ausmachen.</p>
</blockquote>
<p>Eben.</p>
<p>Moment mal: bei der Zurückspringvariante muss man sich beim Einlesen einer neuen Zeile die Position der alten merken - das tellg() kostet auch wieder mehrere tausend Zyklen pro Zeile.</p>
<p>Gut, dann unterm Strich:<br />
Vergiss das mit dem Zurückspringen einfach.<br />
Letzte Zeile merken ist in allen Lebenslagen besser.</p>
</blockquote>
<p>selbst wenn es für das ausrechnen der stelle und für das springen, zweimal mehrere tausen sind ist das unterm strich n absoluter wert und die nadere variante ist lineare und wird somit iwann durch die erste übertrumpft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932528</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 11:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 11:43:55 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>selbst wenn es für das ausrechnen der stelle und für das springen, zweimal mehrere tausen sind ist das unterm strich n absoluter wert und die nadere variante ist lineare und wird somit iwann durch die erste übertrumpft.</p>
</blockquote>
<p>Die andere Variante ist nicht unbedingt linear. Vermutlich kostet sie sogar 0. Du bist höchstwahrscheinlich sowieso am Warten auf die IO. Ob du währenddessen Strings verschiebst, ist völlig Wumpe, davon wird die Festplatte auch nicht schneller oder langsamer. Denke daran, dass die IO durchaus parallel im Hintergrund arbeitet, egal was dein Programm gerade macht.</p>
<p>Deshalb ist es auch durchaus eine gute Idee, immer alle schon machbaren Arbeitsschritte während des Einlesens einer Datei zu erledigen, anstatt erst alles zu lesen und dann zu rechnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932530</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 27 Jul 2010 11:43:55 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 11:47:45 GMT]]></title><description><![CDATA[<p>[quote=&quot;Rustyspoon<br />
selbst wenn es für das ausrechnen der stelle und für das springen, zweimal mehrere tausen sind ist das unterm strich n absoluter wert[/quote]</p>
<p>Wieso absolut ? Du musst du dir doch die Position für jede neue Zeile erneut merken. Du musst nur einmal springen, das ist absolut, aber das merken der Anfangsposition der letzten Zeile variiert doch genauso je nach größe der Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932536</guid><dc:creator><![CDATA[gnarf88]]></dc:creator><pubDate>Tue, 27 Jul 2010 11:47:45 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 12:43:22 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Rustyspoon schrieb:</p>
<blockquote>
<p>selbst wenn es für das ausrechnen der stelle und für das springen, zweimal mehrere tausen sind ist das unterm strich n absoluter wert und die nadere variante ist lineare und wird somit iwann durch die erste übertrumpft.</p>
</blockquote>
<p>Die andere Variante ist nicht unbedingt linear. Vermutlich kostet sie sogar 0. Du bist höchstwahrscheinlich sowieso am Warten auf die IO. Ob du währenddessen Strings verschiebst, ist völlig Wumpe, davon wird die Festplatte auch nicht schneller oder langsamer. Denke daran, dass die IO durchaus parallel im Hintergrund arbeitet, egal was dein Programm gerade macht.</p>
<p>Deshalb ist es auch durchaus eine gute Idee, immer alle schon machbaren Arbeitsschritte während des Einlesens einer Datei zu erledigen, anstatt erst alles zu lesen und dann zu rechnen.</p>
</blockquote>
<p>ah okay, danke für das hintergrund wissen <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>Rustyspoon schrieb:</p>
<blockquote>
<p>selbst wenn es für das ausrechnen der stelle und für das springen, zweimal mehrere tausen sind ist das unterm strich n absoluter wert</p>
</blockquote>
<p>Wieso absolut ? Du musst du dir doch die Position für jede neue Zeile erneut merken. Du musst nur einmal springen, das ist absolut, aber das merken der Anfangsposition der letzten Zeile variiert doch genauso je nach größe der Datei.</p>
</blockquote>
<p>sorry aber das ist arg undeutlich formuliert. ich kann dir desshalb nicht genau sagen wo dein Denkfehler ist. es wird aber nur einmal absoluten rechenaufwand fürs zeilen springen und einmal absoluten rechenaufwand zum erechnen der &quot;sprungweite&quot; benötigt.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932564</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Tue, 27 Jul 2010 12:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to istream, eine zeile zurück springen[gelöst] on Tue, 27 Jul 2010 12:44:24 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Deshalb ist es auch durchaus eine gute Idee, immer alle schon machbaren Arbeitsschritte während des Einlesens einer Datei zu erledigen, anstatt erst alles zu lesen und dann zu rechnen.</p>
</blockquote>
<p>das kann man so nicht sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1932566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1932566</guid><dc:creator><![CDATA[no_code]]></dc:creator><pubDate>Tue, 27 Jul 2010 12:44:24 GMT</pubDate></item></channel></rss>