<?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[STL copy [Gelöst]]]></title><description><![CDATA[<p>Den Inhalt eines Vektors könnte man mit</p>
<pre><code class="language-cpp">copy (myVec.begin(),myVec.end(),ostream_iterator&lt;int&gt;(datei));
</code></pre>
<p>in eine Datei speichern.</p>
<p>Wenn der Vektor nun aus Objekten einer Klasse bestünde, also z.B.</p>
<pre><code class="language-cpp">class foo
{...};

int main()
{
 vector&lt;foo&gt; myVector;
 return 0;
}
</code></pre>
<p>Wie könnte man diesen Vektor mit copy in eine Datei speichern?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/298858/stl-copy-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 13:31:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298858.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Jan 2012 23:35:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 01:26:05 GMT]]></title><description><![CDATA[<p>Den Inhalt eines Vektors könnte man mit</p>
<pre><code class="language-cpp">copy (myVec.begin(),myVec.end(),ostream_iterator&lt;int&gt;(datei));
</code></pre>
<p>in eine Datei speichern.</p>
<p>Wenn der Vektor nun aus Objekten einer Klasse bestünde, also z.B.</p>
<pre><code class="language-cpp">class foo
{...};

int main()
{
 vector&lt;foo&gt; myVector;
 return 0;
}
</code></pre>
<p>Wie könnte man diesen Vektor mit copy in eine Datei speichern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174002</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 29 Jan 2012 01:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sat, 28 Jan 2012 23:48:06 GMT]]></title><description><![CDATA[<p>Wie du <a href="http://www.cplusplus.com/reference/std/iterator/ostream_iterator/" rel="nofollow">hier</a> sehen kannst, nutzt der ostream_iterator den operator &lt;&lt;, dieser muss also auf ostream für Foo überladen sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174004</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 28 Jan 2012 23:48:06 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 01:45:55 GMT]]></title><description><![CDATA[<p>also z.B.:</p>
<pre><code class="language-cpp">//ostream &amp;operator&lt;&lt;(ostream &amp;stream,foo &amp;obj)
//edit: richtig ist:
ostream &amp;operator&lt;&lt;(ostream &amp;stream, const foo &amp;obj)
{
  return stream &lt;&lt; foo.xyz;
}
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174007</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 29 Jan 2012 01:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 00:10:01 GMT]]></title><description><![CDATA[<p>Genau. Wobei ich persönlich sagen muss, dass mir so etwas besser gefallen würde:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
std::ostream&amp; operator &lt;&lt; (std::ostream&amp; stream, const std::vector&lt;T&gt;&amp; v)
{
  // Elemente mit Schleife in stream schreiben. Eventuell in {} gekapselt.
}
// Dann kann man gleich schreiben:

int main()
{
  std::vector&lt;Foo&gt; v;
  ...
  std::cout &lt;&lt; v;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2174008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174008</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 29 Jan 2012 00:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 01:20:59 GMT]]></title><description><![CDATA[<p>Ok. Mit Templates habe ich mich noch nicht beschäftigt.</p>
<p>Meinen Vorschlag hatte ich im Vorfeld schon ausprobiert, leider kompiliert der Code nicht.</p>
<pre><code class="language-cpp">//Überladung von Operatoren, auch im Zusammenhang mit STL-Copy
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

using namespace std;

class Spieler
{
    public:
    int geld;
};

//ostream&amp; operator&lt;&lt;(ostream &amp;os,Spieler &amp;p)
//edit: richtig ist:
ostream&amp; operator&lt;&lt;(ostream &amp;os,const Spieler &amp;p)
{return os&lt;&lt;p.geld;}

istream&amp; operator&gt;&gt;(istream &amp;os,Spieler &amp;p)
{return os&gt;&gt;p.geld;}

int main()
{
    Spieler a;
    vector&lt;Spieler&gt;myVector;
    cin&gt;&gt;a;
    myVector.push_back(a);
    cout&lt;&lt;myVector[0];
    cout&lt;&lt;&quot;\n&quot;&lt;&lt;a;
    fstream filestream(&quot;test.txt&quot;,ios::out|ios::trunc);
    if(!filestream)
    {return 20;}
    copy(myVector.begin(),myVector.end(),ostream_iterator&lt;Spieler&gt;(filestream));
    //filestream.close();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2174011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174011</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 29 Jan 2012 01:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 01:14:15 GMT]]></title><description><![CDATA[<p>Bei operator &lt;&lt; muss es const Spieler&amp; heißen. (Du kannst übrigens auch ostream_iterator&lt;Spieler&gt;(cout) schreiben, das scheint mir leicher zum Debuggen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174017</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 29 Jan 2012 01:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 01:22:38 GMT]]></title><description><![CDATA[<p>Jupp. Jetzt funktioniert es. Danke für den Tip.</p>
<p>Warum muß man eigentlich das &quot;const&quot; setzen?<br />
Normalerweise ist das doch optional oder?</p>
<p>Und wenn beim &quot;&lt;&lt;&quot; warum dann nicht beim &quot;&gt;&gt;&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174018</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 29 Jan 2012 01:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 01:29:36 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>Warum muß man eigentlich das &quot;const&quot; setzen?</p>
</blockquote>
<p>Google nach &quot;const-correcness&quot;. Hier kurz:<br />
Alles was ich für Pointer schreibe gilt gleichermaßen für Referenzen:</p>
<pre><code class="language-cpp">const char* p; // Gelesen &quot;pointer to const char&quot;
char const* p; // Daher schreiben einige das so, jetzt kann man den Typ rückwärts lesen.
char* const p; // Jetzt ist der Pointer konstant, nicht das worauf er zeigt.

void foo(const int); // Nicht unbedingt sinnvoll, das const gibt dem Aufrufer keinerlei Informationen.
void foo(const char* p); // Wichtig! Das garantiert dem Aufrufer, dass die Dinge auf die p zeigt nicht geändert werden. 
                         // Falls das möglich ist, ist es char* gegenüber zu bevorzugen.

struct Foo
{
  void foo() const; // Das macht &quot;this&quot; const. Es können keine* Membervariablen geändert werden, 
                   // Und keine nicht const Methoden aufgerufen werden, da this ja jetzt const Foo* ist.
  void bar(); // foo könnte bar nicht aufrufen.
};

void foo(const Foo* f)
{
  f-&gt;foo(); // Ok
  f-&gt;bar(); // pum, Fehler
}
</code></pre>
<p>Dafür ist übrigens const_cast, den man aber wirklich mit Bedacht einsetzen sollte. const_cast kann auch nur das worauf Referenzen und Pointer zeigen &quot;ent-consten&quot;. Ein cast auf z.B. ein const int wäre nicht möglich. (Und würde bei Zuweisung auch in undefiniertem Verhalten enden.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174020</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 29 Jan 2012 01:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 01:54:02 GMT]]></title><description><![CDATA[<p>Hmm, ok. Werde mir das mal in Ruhe anschauen. Auch const-correctness.<br />
Generell verstehe ich schon, warum das das Setzen von &quot;const&quot; sinnvoll ist,<br />
nur warum es z.B. wie hier bei &quot;&lt;&lt;&quot; gesetzt werden muß, hingegen bei &quot;&gt;&gt;&quot; nicht,<br />
ist mir zur Zeit noch ein Rätsel.</p>
<p>Jetzt werde ich erstmal pennen gehen. Morgen ist auch noch ein Tag.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174023</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 29 Jan 2012 01:54:02 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 01:55:16 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>bei &quot;&gt;&gt;&quot; nicht,</p>
</blockquote>
<p>Bei der Funktion änderst du doch das Objekt hinter der Referenz. Denkst du nicht, dass es etwas stören würde, wenn dieses Objekt jetzt konstant wäre? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2174024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174024</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 29 Jan 2012 01:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 23:41:11 GMT]]></title><description><![CDATA[<p>Stimmt, Du hast natürlich recht. Durch die ganze Sucherei wegen dem fehlenden &quot;const&quot; hatte ich ein Brett vor dem Kopp.</p>
<p>Aber warum man zwingend das &quot;const&quot; bei &quot;&lt;&lt;&quot; setzen muß, ist mir nicht ganz klar,<br />
oder es gibt keine vorstellbare Situation, wo das übergebene Objekt noch geändert werden soll ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174363</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 29 Jan 2012 23:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Sun, 29 Jan 2012 23:48:34 GMT]]></title><description><![CDATA[<p>Damit gibst du dem Aufrufenden die Garantie, dass du es nicht änderst. Stichwort: const correctness</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174366</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 29 Jan 2012 23:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Mon, 30 Jan 2012 00:10:51 GMT]]></title><description><![CDATA[<p>Edit: gelöscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174375</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Mon, 30 Jan 2012 00:10:51 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Mon, 30 Jan 2012 09:28:02 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>muß, ist mir nicht ganz klar,<br />
oder es gibt keine vorstellbare Situation, wo das übergebene Objekt noch geändert werden soll ?</p>
</blockquote>
<p>von einem Ausgabeoperator erwarte ich, dass er ein bestimmtes Objekt ausgibt. Wieso sollte er das Objekt dafür ändern?</p>
<p>Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174442</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 30 Jan 2012 09:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Mon, 30 Jan 2012 10:32:40 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>oder es gibt keine vorstellbare Situation, wo das übergebene Objekt noch geändert werden soll ?</p>
</blockquote>
<p>Klar kann man sich Situationen vorstellen, wo das Objekt noch verändert wird. Das fällt dann unter die Kategorie Designfehler. Denn erstens ist das völlig unerwartet (oder rechnest du damit, dass ein Objekt seinen sichtbaren<sup>1</sup> Status ändert, wenn du es ausgibst?), zweitens verletzt das dann das SRP, denn einzige Aufgabe des op&lt;&lt; ist, eine Repräsentation des Objekts in den Stream zu schreiben und nicht, es zu verändern.</p>
<p>_______________<br />
<sup>1</sup> es mag interne Daten geben, die nicht zum sichtbaren Zustand gehören, die durchaus auch von irgendwelchen komplexeren Ausgabeoperationen angefasst werden könnten. Solche Daten gehören aber mutable deklariert und damit immernoch const für den op&lt;&lt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174474</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 30 Jan 2012 10:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to STL copy [Gelöst] on Mon, 30 Jan 2012 16:44:24 GMT]]></title><description><![CDATA[<p>Der Grund defür, dass Du const setzen musst, liegt in der Definition der = Operators des Iterators. Schriebst Du einfach nur <code>cout &lt;&lt; a;</code> , dann funktioniert auch ein &lt;&lt;Operator, der keine const Referenz erwartet. Bei <code>copy</code> wird aber für jedes Element zwischen erstem und zweitem Argument <code>drittes Argument = Element</code> aufgerufen. Das dritte Argument ist dein ostream_iterator. Wenn Du <a href="http://www.cplusplus.com/reference/std/iterator/ostream_iterator/" rel="nofollow">hier</a> mal guckst, wie der =operator definiert ist siehst Du</p>
<pre><code class="language-cpp">ostream_iterator&amp; operator= (const T&amp; value);
</code></pre>
<p>Der ostream_iterator ruft in diesem Operator den &lt;&lt;operator auf und zwar mit genau dieser konstanten Referenz. Also MUSST Du einen &lt;&lt;operator bereitstellen, der eine konstante Referenz entgegen nimmt.</p>
<p>Auf der anderen Seite ist es aber sowieso eine gute Idee das Argument const zu machen, aber das haben die anderen ja shcon erklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2174673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2174673</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 30 Jan 2012 16:44:24 GMT</pubDate></item></channel></rss>