<?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[Verständnisproblem: istream_iterator]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich hab' hier grad ein kleines Problem mit folgendem Stück Code:</p>
<pre><code>vector&lt;string&gt; woerter;
	istream_iterator&lt;string&gt; eos;
	istream_iterator&lt;string&gt; is(cin);
	cout &lt;&lt; &quot;iterator erstellt&quot; &lt;&lt; endl;
	copy(is, eos, back_inserter(woerter));
	cout &lt;&lt; &quot;inhalt von iterator in vektor kopiert&quot; &lt;&lt; endl;
	copy(woerter.begin(),woerter.end(), ostream_iterator&lt;string&gt;(cout, &quot;, &quot;));
</code></pre>
<p>Wenn ich das Programm laufen lasse, kann ich wie erwartet einen Text eingeben (da ich im Konstruktor des einten istream_iterators die Standardeingabe angebe) und das wird dann Wort für Wort in meinen Vektor kopiert.</p>
<p>Was ich aber nicht verstehe ist, dass ich nach der ersten Eingabe, noch mehr eingeben kann. Denn nach der ersten Eingabe kommt die erste Meldung, dass der Iterator erstellt wurde.<br />
Ist danach die Standardeingabe also immernoch aktiv, bis ich sie durch CTRL+Z beende? Wieso bleibt das Programm nicht auf der Zeile mit cin im Konstruktor, bis ich die Eingabe beende?</p>
<p>Oder läuft es folgendermassen:<br />
im ersten Copy rufe ich ja den istream_iterator auf, den ich mit der Standardeingabe im Konstruktor erstellt habe. Dieser iterator und der eos sind nun solange ungleich, bis ich die Eingabe durch CTRL+Z beende. Durch jedes inkrementieren des ersten iterators (is), wird dessen Konstruktor erneut aufgerufen?</p>
<p>Kurz und bündig:<br />
Wieso erscheint die Ausgabe &quot;iterator erstellt&quot; und dennoch kann ich nachher noch mehr Text eingeben?</p>
<p>Vielen Dank für allfällige Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/243039/verständnisproblem-istream_iterator</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 15:24:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243039.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Jun 2009 13:59:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisproblem: istream_iterator on Thu, 11 Jun 2009 13:59:43 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich hab' hier grad ein kleines Problem mit folgendem Stück Code:</p>
<pre><code>vector&lt;string&gt; woerter;
	istream_iterator&lt;string&gt; eos;
	istream_iterator&lt;string&gt; is(cin);
	cout &lt;&lt; &quot;iterator erstellt&quot; &lt;&lt; endl;
	copy(is, eos, back_inserter(woerter));
	cout &lt;&lt; &quot;inhalt von iterator in vektor kopiert&quot; &lt;&lt; endl;
	copy(woerter.begin(),woerter.end(), ostream_iterator&lt;string&gt;(cout, &quot;, &quot;));
</code></pre>
<p>Wenn ich das Programm laufen lasse, kann ich wie erwartet einen Text eingeben (da ich im Konstruktor des einten istream_iterators die Standardeingabe angebe) und das wird dann Wort für Wort in meinen Vektor kopiert.</p>
<p>Was ich aber nicht verstehe ist, dass ich nach der ersten Eingabe, noch mehr eingeben kann. Denn nach der ersten Eingabe kommt die erste Meldung, dass der Iterator erstellt wurde.<br />
Ist danach die Standardeingabe also immernoch aktiv, bis ich sie durch CTRL+Z beende? Wieso bleibt das Programm nicht auf der Zeile mit cin im Konstruktor, bis ich die Eingabe beende?</p>
<p>Oder läuft es folgendermassen:<br />
im ersten Copy rufe ich ja den istream_iterator auf, den ich mit der Standardeingabe im Konstruktor erstellt habe. Dieser iterator und der eos sind nun solange ungleich, bis ich die Eingabe durch CTRL+Z beende. Durch jedes inkrementieren des ersten iterators (is), wird dessen Konstruktor erneut aufgerufen?</p>
<p>Kurz und bündig:<br />
Wieso erscheint die Ausgabe &quot;iterator erstellt&quot; und dennoch kann ich nachher noch mehr Text eingeben?</p>
<p>Vielen Dank für allfällige Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1725056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725056</guid><dc:creator><![CDATA[Yarrow]]></dc:creator><pubDate>Thu, 11 Jun 2009 13:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: istream_iterator on Thu, 11 Jun 2009 14:12:15 GMT]]></title><description><![CDATA[<p>Ein <code>istream_iterator</code> liest solange aus einem Stream, solange dieser gültig ist. Also muss der Stream ans Ende kommen (nicht das gleiche wie Zeilenende) oder eine ungültige Eingabe muss geschehen, was aber bei einer Worteingabe ziemlich schwierig ist <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 />
Wenn du nur eine Zeile willst, lies die Zeile zuerst in einen <code>std::string</code> mit <code>std::getline</code> , dann erstelle ein <code>istringstream</code> und lies über diesen ein.</p>
<p>Referenz: <a href="http://www.cplusplus.com/reference/" rel="nofollow">http://www.cplusplus.com/reference/</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725061</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 11 Jun 2009 14:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: istream_iterator on Thu, 11 Jun 2009 14:22:44 GMT]]></title><description><![CDATA[<p>Okay, soweit klar.<br />
Aber warum läuft's dann im Programmcode weiter, obwohl der Stream eigentlich noch am Lesen bzw. auf meine Eingabe am Warten ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725065</guid><dc:creator><![CDATA[Yarrow]]></dc:creator><pubDate>Thu, 11 Jun 2009 14:22:44 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: istream_iterator on Thu, 11 Jun 2009 14:39:57 GMT]]></title><description><![CDATA[<p>Sobald du den <code>istream_iterator</code> mit dem <code>std::cin</code> Objekt erstellst, wird zum ersten Mal ein Wert ausgelesen. Danach immer dann, wenn der Iterator inkrementiert wird.</p>
<p>Steht alles hier:<br />
<a href="http://www.cplusplus.com/reference/std/iterator/istream_iterator/" rel="nofollow">http://www.cplusplus.com/reference/std/iterator/istream_iterator/</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725072</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 11 Jun 2009 14:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: istream_iterator on Thu, 11 Jun 2009 14:59:12 GMT]]></title><description><![CDATA[<p>Achso ok.</p>
<p>Hab das vorher mal gelesen aber ehrlichgesagt nicht ganz verstanden. Das passiert ja in operator++() (ohne Parameter ist's die preinkrement-Variante, richtig?) an folgender Stelle: *in_stream &gt;&gt; value, stimmt das? <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>Danke für deine Hilfe <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>Ich habe gerade noch eine kleine Frage bzgl. Call-by-Reference:</p>
<pre><code>void kopiereWort(vector&lt;string&gt; &amp;v, string wort) {
      v.push_back(wort);
      cout &lt;&lt; &quot;vector grösse: &quot; &lt;&lt; v.size() &lt;&lt; &quot;, wort: &quot; &lt;&lt; wort &lt;&lt; endl;
}

      vector&lt;string&gt; test;
      test.push_back(&quot;Dies&quot;);
      test.push_back(&quot;ist&quot;);
      test.push_back(&quot;ein&quot;);
      test.push_back(&quot;Test&quot;);
      vector&lt;string&gt; leererVector;

      for_each(test.begin(),test.end(), boost::bind(kopiereWort, leererVector, _1));
      cout &lt;&lt; &quot;leererVector Grösse: &quot; &lt;&lt; leererVector.size() &lt;&lt; endl;
</code></pre>
<p>Nun müsste doch ganz am Ende der &quot;leererVector&quot; die 4 Elemente drin haben. In der Funktion kopiere Wort werden diese und die Grösse des Vektors noch korrekt ausgegeben, aber nach dem for_each ist der Vektor trotzdem leer. Warum? Ich hab ja in der Methode kopiereWort extra eine Referenz als Parameter für den Vektor genommen, damit dieser eben nicht kopiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725085</guid><dc:creator><![CDATA[Yarrow]]></dc:creator><pubDate>Thu, 11 Jun 2009 14:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: istream_iterator on Thu, 11 Jun 2009 15:04:13 GMT]]></title><description><![CDATA[<p><code>boost::bind</code> erstellt eine Kopie von <code>leererVector</code> . Alle Argumente, welche du an <code>boost::bind</code> übergibst, werden kopiert, sofern du es nicht anders angibst. Um eine Referenz zu übergeben, musst du zuerst einen Reference Wrapper erstellen. Dies geht mit <code>boost::ref</code> .</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1725088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725088</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 11 Jun 2009 15:04:13 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: istream_iterator on Thu, 11 Jun 2009 15:11:56 GMT]]></title><description><![CDATA[<p>Ja, jetzt klappt's.</p>
<p>Danke vielmals! <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="🙂"
    /> <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/1725094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1725094</guid><dc:creator><![CDATA[Yarrow]]></dc:creator><pubDate>Thu, 11 Jun 2009 15:11:56 GMT</pubDate></item></channel></rss>