<?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_iterator]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen istream_iterator. mit diesem will ich die ersten 7 zeichen aus einer datei auslesen. das mache ich wie folgt:</p>
<pre><code class="language-cpp">std::istream_iterator file(in); // in ist ein ifstream
std::string str;
for (unsigned i = 0; i &lt; 7; ++i, ++file)
{
  str += *file;
}
</code></pre>
<p>(Dateiinhalt: BLENDER_v usw.)<br />
das problem an der sache ist, dass nach der schleife der iterator schon beim 7. zeichen (dem '_') steht, dass heißt eins zu weit. denn wenn ich jetzt das nächste zeichen auslesen will, darf ich vorher kein ++file schreiben.<br />
mir fällt nicht ein, wie man das problem lösen kann, so dass der iterator nach der schleife beim 'R' stehen bleibt.</p>
<p>mit schönen grüßen</p>
<p>Vario-500</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293973/istream_iterator</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 02:55:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293973.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Oct 2011 14:46:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to istream_iterator on Fri, 14 Oct 2011 14:46:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen istream_iterator. mit diesem will ich die ersten 7 zeichen aus einer datei auslesen. das mache ich wie folgt:</p>
<pre><code class="language-cpp">std::istream_iterator file(in); // in ist ein ifstream
std::string str;
for (unsigned i = 0; i &lt; 7; ++i, ++file)
{
  str += *file;
}
</code></pre>
<p>(Dateiinhalt: BLENDER_v usw.)<br />
das problem an der sache ist, dass nach der schleife der iterator schon beim 7. zeichen (dem '_') steht, dass heißt eins zu weit. denn wenn ich jetzt das nächste zeichen auslesen will, darf ich vorher kein ++file schreiben.<br />
mir fällt nicht ein, wie man das problem lösen kann, so dass der iterator nach der schleife beim 'R' stehen bleibt.</p>
<p>mit schönen grüßen</p>
<p>Vario-500</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131482</guid><dc:creator><![CDATA[vario-500]]></dc:creator><pubDate>Fri, 14 Oct 2011 14:46:28 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator on Fri, 14 Oct 2011 15:17:09 GMT]]></title><description><![CDATA[<p>Warum willst du denn das 'R' mehrmals einlesen?</p>
<pre><code class="language-cpp">std::istream_iterator file(in); // in ist ein ifstream
std::string str;
for (unsigned i = 0; i &lt; 6; ++i, ++file)
{
  str += *file;
}
str += *file
</code></pre>
<p>Wär eine Variante ...</p>
<p>mfg D3lta</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131491</guid><dc:creator><![CDATA[D3lta]]></dc:creator><pubDate>Fri, 14 Oct 2011 15:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator on Fri, 14 Oct 2011 15:20:08 GMT]]></title><description><![CDATA[<p>ich will das 'R' nicht mehrmals einlesen, ich will nur der Übersichtlichkeit halber im nächsten schritt wo ich das '_' einlese, erst ++file schreiben.<br />
sonst kommt man ja selbst irgendwann durcheinander, wenn man das immer anders macht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131494</guid><dc:creator><![CDATA[vario-500]]></dc:creator><pubDate>Fri, 14 Oct 2011 15:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator on Fri, 14 Oct 2011 15:23:11 GMT]]></title><description><![CDATA[<p>Ich würde es trotzdem so machen, wie du es nicht wolltest <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>mfg D3lta</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131495</guid><dc:creator><![CDATA[D3lta]]></dc:creator><pubDate>Fri, 14 Oct 2011 15:23:11 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator on Fri, 14 Oct 2011 16:07:39 GMT]]></title><description><![CDATA[<p>Am übersichtlichsten ist, wenn du auslesen und Inkrementieren immer zusammen schreibst. Also: Auslesen eines Zeichens:</p>
<pre><code class="language-cpp">char c = *file++;
</code></pre>
<p>Danach steht der Lesezeiger ein Zeichen weiter auf dem nächsten Zeichen. Auslesen von 7 Zeichen: deine Schleife. Danach steht der Zeiger auf dem danach folgenden Zeichen. Das ist auch konsistent mit der üblichen Implementierung der Streamoperatoren, dass der gesamte gelesene Input konsumiert wird. Und wenn du die Schleife mal in eine Funktion packst, erwartest du ja auch nicht, dass du danach noch mal ein Zeichen lesen musst, um mit dem Auswerten vortfahren zu können.</p>
<p>Bei der Gelegenheit solltest du auch nochmal überlegen, ob du den istream-Iterator überhaupt brauchst oder ob nicht die normalen Streamoperationen besser wären. Da gibt es dann auch keine Missverständnisse, wo gerade der Lesezeiger ist. Der Sinn der Streamiteratoren ist eigentlich vorwiegend, dass Algorithmen, die mit Iteratoren arbeiten, auch auf Streams operieren können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131502</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 14 Oct 2011 16:07:39 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator on Fri, 14 Oct 2011 21:25:29 GMT]]></title><description><![CDATA[<p>das von ipsec finde ich einleuchtend.</p>
<p>ich hab den stream iterator genommen, weil ich es einfacher fand, mit diesen die datei auszulesen.<br />
ich könnte ich auch ifstream::read benutzten (ich muss eigentlich mehr oder weniger blöcke von bekannter größe einlesen), aber so wie die ganzen beispiele dazu sind, muss ich da ganz schön mit cstrings rumhantieren, oder kann man die funktion auch mit c++ strings verwenden?<br />
und wenn ich ifstream::get benutzte, kommt das doch fast auf das gleiche wie die iterator variente hinaus, oder?<br />
eine andere möglichkeit wäre ja noch, sich einen eigenen iterator, wrapper (oder wie man es auch nennen mag) zu basteln, der dann genau auf dieses format abgestimmt ist, so dass dieser zum beispiel ein block auf einmal einliest, den zurückgiebt, so dass man diesen weiter bearbeiten kann.<br />
welchen weg würdet ihr nehmen, um eine datei einzulesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131571</guid><dc:creator><![CDATA[vario-500]]></dc:creator><pubDate>Fri, 14 Oct 2011 21:25:29 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator on Sat, 15 Oct 2011 10:16:27 GMT]]></title><description><![CDATA[<p>Du kannst den <code>istream</code> genau wie jeden anderen Stream (z.B. <code>cout</code> ) verwenden. Insbesondere funktionieren die Operatoren <code>&lt;&lt;</code> und <code>&gt;&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131658</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sat, 15 Oct 2011 10:16:27 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator on Sat, 15 Oct 2011 11:01:07 GMT]]></title><description><![CDATA[<p>vario-500 schrieb:</p>
<blockquote>
<p>ich will das 'R' nicht mehrmals einlesen, ich will nur der Übersichtlichkeit halber im nächsten schritt wo ich das '_' einlese, erst ++file schreiben.</p>
</blockquote>
<p>Warum? Du schreibst ja auch nicht ++file, bevor Du das erste Zeichen einliest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2131685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2131685</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sat, 15 Oct 2011 11:01:07 GMT</pubDate></item></channel></rss>