<?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[std::copy vs std::ifstream::get()]]></title><description><![CDATA[<p>Hallo werte Programmierer^^<br />
Was tut</p>
<pre><code>std::ifstream file(filename.c_str(),std::ios::binary);
    std::copy(std::istream_iterator&lt;quint8&gt;(file), std::istream_iterator&lt;quint8&gt;(),std::back_inserter(data));
    file.close();
</code></pre>
<p>anderes als</p>
<pre><code>std::ifstream file(filename.c_str(),std::ios::binary);
    while(!file.eof())
        data.push_back(file.get());
    file.close();
</code></pre>
<p>?<br />
data ist ein std::vector&lt;quint8&gt;.</p>
<p>Scheinbar wird die Datei verschieden ausgelesen, denn bei dem Dateiformat welches ich auslas(in die variable &quot;data&quot;) ergaben sich an vereinzelten Stellen unterschiede bei der Auswertung, jenachdem ob ich std::copy oder file.get() verwendet habe.<br />
Weiß das jemand adhoc? Könnte auch konkreten Code posten, aber vielleicht reicht das ja schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312362/std-copy-vs-std-ifstream-get</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 20:45:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312362.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Jan 2013 00:09:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::copy vs std::ifstream::get() on Thu, 03 Jan 2013 00:09:19 GMT]]></title><description><![CDATA[<p>Hallo werte Programmierer^^<br />
Was tut</p>
<pre><code>std::ifstream file(filename.c_str(),std::ios::binary);
    std::copy(std::istream_iterator&lt;quint8&gt;(file), std::istream_iterator&lt;quint8&gt;(),std::back_inserter(data));
    file.close();
</code></pre>
<p>anderes als</p>
<pre><code>std::ifstream file(filename.c_str(),std::ios::binary);
    while(!file.eof())
        data.push_back(file.get());
    file.close();
</code></pre>
<p>?<br />
data ist ein std::vector&lt;quint8&gt;.</p>
<p>Scheinbar wird die Datei verschieden ausgelesen, denn bei dem Dateiformat welches ich auslas(in die variable &quot;data&quot;) ergaben sich an vereinzelten Stellen unterschiede bei der Auswertung, jenachdem ob ich std::copy oder file.get() verwendet habe.<br />
Weiß das jemand adhoc? Könnte auch konkreten Code posten, aber vielleicht reicht das ja schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285510</guid><dc:creator><![CDATA[Namenloser324]]></dc:creator><pubDate>Thu, 03 Jan 2013 00:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to std::copy vs std::ifstream::get() on Thu, 03 Jan 2013 00:16:42 GMT]]></title><description><![CDATA[<p>Ok, hab es eben selber rausgefunden haha.</p>
<p>Liegt daran, dass std::copy scheinbar die einstellung whitespaces zu ignorieren des filestreams übernimmt.<br />
Mittels</p>
<pre><code>file &gt;&gt; std::noskipws;
</code></pre>
<p>ging es dann.<br />
Scheint wohl daran zu liegen das std::copy formatierungen des streams übernimmt und ::get() diese ignoriert(ist ja unformatted data).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285511</guid><dc:creator><![CDATA[Namenloser324]]></dc:creator><pubDate>Thu, 03 Jan 2013 00:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to std::copy vs std::ifstream::get() on Thu, 03 Jan 2013 00:56:09 GMT]]></title><description><![CDATA[<p>Der große Unterschied ist, dass du bei deinem copy hier einen istream_iterator benutzt, der ganz was anderes ist als <code>istream::get</code> . Der nutzt nämlich <code>operator&gt;&gt;(entsprechender_typ)</code> . Mit den von dir beobachteten Konsequenzen bezüglich Whitespaces und auch die Performance wird eine ganz andere sein. Einem get entspräche (ziemlich, aber auch nicht ganz genau) ein istreambuf_iterator. Den kannst du natürlich auch mit copy benutzen. copy ist einfach definiert als (oder äquivalent zu):</p>
<pre><code>template&lt;class InputIterator, class OutputIterator&gt;
  OutputIterator copy ( InputIterator first, InputIterator last, OutputIterator result )
{
  while (first!=last) *result++ = *first++;
  return result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2285517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285517</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Jan 2013 00:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to std::copy vs std::ifstream::get() on Thu, 03 Jan 2013 10:19:36 GMT]]></title><description><![CDATA[<p>Und</p>
<pre><code class="language-cpp">while(!file.eof())
   data.push_back(file.get());
</code></pre>
<p>ist auch semantisch falsch - schau dir mal das letzte Zeichen von 'data' an (d.h. Vergleiche die Länge der Originaldatei mit 'data.size()' ;-).<br />
eof() arbeitet <strong>nicht</strong> vorausschauend, sondern dieses Flag wird erst immer nach einer Leseoperation entsprechend gesetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285588</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 03 Jan 2013 10:19:36 GMT</pubDate></item></channel></rss>