<?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[Datei in einen vector lesen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe hier <a href="http://www.c-plusplus.net/forum/p2391664#2391664" rel="nofollow">http://www.c-plusplus.net/forum/p2391664#2391664</a> etwas gelesen, das ich nicht ganz verstehe. Wäre sehr nett, wenn mir jemand diese zweite Zeile kurz und knackig, aber noch verständlich erklären könnte:</p>
<pre><code>std::ifstream stream{&quot;Pfad.txt&quot;};
std::vector&lt;int&gt; numbers{ std::istream_iterator&lt;int&gt;{stream},std::istream_iterator&lt;int&gt;{} };
</code></pre>
<p>Anscheinend ist das die Kurzform für</p>
<pre><code>int x;
while(stream &gt;&gt; x)
    numbers.push_back(x);
</code></pre>
<p>verstehe aber nicht wie und wieso?</p>
<p>Vielen Dank im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324710/datei-in-einen-vector-lesen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 23:30:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324710.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Mar 2014 19:41:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei in einen vector lesen on Fri, 28 Mar 2014 19:41:37 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe hier <a href="http://www.c-plusplus.net/forum/p2391664#2391664" rel="nofollow">http://www.c-plusplus.net/forum/p2391664#2391664</a> etwas gelesen, das ich nicht ganz verstehe. Wäre sehr nett, wenn mir jemand diese zweite Zeile kurz und knackig, aber noch verständlich erklären könnte:</p>
<pre><code>std::ifstream stream{&quot;Pfad.txt&quot;};
std::vector&lt;int&gt; numbers{ std::istream_iterator&lt;int&gt;{stream},std::istream_iterator&lt;int&gt;{} };
</code></pre>
<p>Anscheinend ist das die Kurzform für</p>
<pre><code>int x;
while(stream &gt;&gt; x)
    numbers.push_back(x);
</code></pre>
<p>verstehe aber nicht wie und wieso?</p>
<p>Vielen Dank im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391665</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Fri, 28 Mar 2014 19:41:37 GMT</pubDate></item><item><title><![CDATA[Reply to Datei in einen vector lesen on Fri, 28 Mar 2014 19:55:07 GMT]]></title><description><![CDATA[<p>std::vector hat einen Konstruktor, der zwei Iteratoren entgegen nimmt.<br />
Der macht <strong>in etwa</strong> folgendes:</p>
<pre><code>for (; begin != end; ++begin)
  push_back(*begin);
</code></pre>
<p>Initialisiert also anhand eines Range.<br />
std::istream_iterator ist ein spezieller Iterator, der beim Dereferenzieren ein Objekt vom Typen aus dem Templateargument aus dem übergebenen Stream liest. Siehe: <a href="http://en.cppreference.com/w/cpp/iterator/istream_iterator" rel="nofollow">http://en.cppreference.com/w/cpp/iterator/istream_iterator</a><br />
Man erzeugt nun einen Iterator auf den Anfang der Datei und einen eins hinters Ende (der ohne Argument). Um den Rest kümmert sich der Range-Konstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391666</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 28 Mar 2014 19:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Datei in einen vector lesen on Fri, 28 Mar 2014 22:13:42 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Vielen Dank für deine Antwort, Nathan.</p>
<p>Vorallem das ein Iterator kein Argument hatte, hat mich etwas verwirt. Aber jetzt kapier ichs soweit ich es im Moment kapieren muss <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>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391683</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Fri, 28 Mar 2014 22:13:42 GMT</pubDate></item><item><title><![CDATA[Reply to Datei in einen vector lesen on Sat, 29 Mar 2014 00:59:06 GMT]]></title><description><![CDATA[<blockquote>
<p>Vorallem das ein Iterator kein Argument hatte, hat mich etwas verwirt.</p>
</blockquote>
<p>Das funktioniert folgendermaßen.</p>
<p>Nathan hat folgende Pseudo-Schleife gezeigt:</p>
<pre><code>for (; begin != end; ++begin)
  push_back(*begin);
</code></pre>
<p>Zwei Dinge fallen auf: Die Schleife bricht ab, sobald der erste gleich dem zweiten Iterator ist, und in jedem Durchgang wird der erste Iterator inkrementiert. Außerdem muss ein Iterator bei mehrfachem Dereferenzieren denselben Wert zurückliefern (was hier allerdings nicht benötigt wird).</p>
<p><code>istream_iterator</code> kapselt die oben beschriebenen Eigenschaften wie folgt: Initialisierst du den <code>istream_iterator</code> mit einer Referenz auf einen Stream, so speichert er einen Verweis auf diesen Stream, extrahiert den ersten Wert und speichert ihn in seiner Membervariable.</p>
<p>Inkrementierst du nun den Iterator, extrahiert er einen neuen Wert aus dem Stream und speichert dessen Wert in seiner Membervariable.</p>
<p>Dereferenzierst du ihn, gibt er den Wert der Membervariable zurück.<br />
War das nicht möglich, und der Stream geht in den Fehlerzustand, dann geht der Iterator in den &quot;Leerzustand&quot; und gleicht beim Vergleich dem leeren Iterator - nämlich <code>std::istream_iterator()</code> (also einem, der ohne Konstruktorargumente initialisiert wurde.). Sobald dieser Fall eintritt, bricht Nathans Schleife ab - genau dann, wenn es nichts mehr zu extrahieren gibt.</p>
<p>Das heißt, sehr grob geschieht folgendes in der Schleife</p>
<pre><code>for (; begin != end /* während die Extraktionsoperation erfolgreich war */ ; ++begin /* Extrahiere nächsten Wert und speichere ihn */ )
  push_back(*begin); // Füge den gespeicherten Wert des Iterators in den Container ein
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2391697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391697</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 29 Mar 2014 00:59:06 GMT</pubDate></item><item><title><![CDATA[Reply to Datei in einen vector lesen on Sat, 29 Mar 2014 10:49:20 GMT]]></title><description><![CDATA[<p>Aah, jau jetzt ergibt alles einen Sinn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
vielen Dank noch für den Zusatz Arcoth</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391714</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Sat, 29 Mar 2014 10:49:20 GMT</pubDate></item></channel></rss>