<?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[istreambuf_iterator]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe hier gerade ein (für mich) unerklärbares phänomen:</p>
<pre><code>typedef std::istreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt; Iter;
void doSomeStuff( Iter beg, Iter end )
{
	string strDay( beg, end);//hier steht alles richtig drin -&gt; will ich aber eigentlich nicht
	char C = *(beg);//liefert aber blödsin strDay[0] != C
	Iter itDot = find( beg, end, '.' );//liefert auch Blödsin -&gt; ItDot = end
}
</code></pre>
<p>Ich will gerne das copieren bei der Konstruktion von strDay sparen und direkt mit den istreambuf_iterator-en arbeiten.</p>
<p>-&gt; hab gerade nochmal gecheckt und den &quot;Fehler&quot; gefunden: wenn ich</p>
<pre><code class="language-cpp">string strDay( beg, end);
</code></pre>
<p>weglasse funktioniert es. Auch wenn ich in der main nach dem Aufruf von doSomeStuff versuche mit den iteratoren weiterzuarbeiten funktioniert nichts mehr. Werden die iteratoren, bei dem Konstruktoraufruf verändert, oder woran liegt das?<br />
Ein typisches Beispiel, wie einem Kontrollausgaben, die man zum Debuggen einbaut auf die Füße fallen können :).</p>
<p>Viele Grüße,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/104102/istreambuf_iterator</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 16:29:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/104102.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Mar 2005 10:49:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to istreambuf_iterator on Wed, 16 Mar 2005 10:49:20 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe hier gerade ein (für mich) unerklärbares phänomen:</p>
<pre><code>typedef std::istreambuf_iterator&lt;char, std::char_traits&lt;char&gt; &gt; Iter;
void doSomeStuff( Iter beg, Iter end )
{
	string strDay( beg, end);//hier steht alles richtig drin -&gt; will ich aber eigentlich nicht
	char C = *(beg);//liefert aber blödsin strDay[0] != C
	Iter itDot = find( beg, end, '.' );//liefert auch Blödsin -&gt; ItDot = end
}
</code></pre>
<p>Ich will gerne das copieren bei der Konstruktion von strDay sparen und direkt mit den istreambuf_iterator-en arbeiten.</p>
<p>-&gt; hab gerade nochmal gecheckt und den &quot;Fehler&quot; gefunden: wenn ich</p>
<pre><code class="language-cpp">string strDay( beg, end);
</code></pre>
<p>weglasse funktioniert es. Auch wenn ich in der main nach dem Aufruf von doSomeStuff versuche mit den iteratoren weiterzuarbeiten funktioniert nichts mehr. Werden die iteratoren, bei dem Konstruktoraufruf verändert, oder woran liegt das?<br />
Ein typisches Beispiel, wie einem Kontrollausgaben, die man zum Debuggen einbaut auf die Füße fallen können :).</p>
<p>Viele Grüße,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/745811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745811</guid><dc:creator><![CDATA[TheBigW]]></dc:creator><pubDate>Wed, 16 Mar 2005 10:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to istreambuf_iterator on Wed, 16 Mar 2005 11:22:02 GMT]]></title><description><![CDATA[<p>Hab gerade mal ein bisschen weitergelesen. istreambuf_iterator-en haben nur einen op++ d.h. wenn sie einmal inkrementiert wurden geht es nicht zurück. Demzufolge hat auch der ctor von string() keine ander wahl, denn zum auslesen muß er je den op++ von istreambuf_iterator aufrufen, oder sehe ich das falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/745836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745836</guid><dc:creator><![CDATA[TheBigW]]></dc:creator><pubDate>Wed, 16 Mar 2005 11:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to istreambuf_iterator on Wed, 16 Mar 2005 11:22:50 GMT]]></title><description><![CDATA[<p>Richtig, istream_iterator ist ein InputIterator, d.h. unter anderem, dass er nur vorwärts bewegt werden kann.</p>
<blockquote>
<p>-3- [Note: For input iterators, a == b does not imply ++a == ++b. (Equality does not guarantee the substitution property or referential transparency.) Algorithms on input iterators should never attempt to pass through the same iterator twice. They should be single pass algorithms. Value type T is not required to be an Assignable type (lib.container.requirements). These algorithms can be used with istreams as the source of the input data through the istream_iterator class. ]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/745841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745841</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 16 Mar 2005 11:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to istreambuf_iterator on Wed, 16 Mar 2005 11:44:19 GMT]]></title><description><![CDATA[<p>Danke, das hellt das Dunkel etwas auf.</p>
<p>Wie wäre da jetzt ein elegantes vorgehen? (Das hängt Dicht mit meinem Internazionlisation Thread zusammen.)<br />
Ich überschreibe gerde von meiner time_get facete die einzelnen Funktionen. Dort parse ich den inputstream z.b.nach dem beim deutschen Datum üblichen Punkt. Leider fällt dann die Verwendung von find aus, da das ja die Position des Iterators verändert.<br />
Also giebt es IMO nur die Möglichkeit selber durch den stream zu laufen und dabei zu parsen, weil alles ander die iteratoren verändert bzw. inkrementiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/745855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745855</guid><dc:creator><![CDATA[TheBigW]]></dc:creator><pubDate>Wed, 16 Mar 2005 11:44:19 GMT</pubDate></item></channel></rss>