<?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[Vektor serialisieren oder in Array kopieren?]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich möchte einen Vektor in einen Data-Stream umwandeln um ihn anschliessend Binär zu speichern.</p>
<p>Der Vektor ist vom Typ Klasse.</p>
<p>Habe gelesen das es relativ umständlich ist einen vector zu serialisieren. Folgendes habe ich programmiert:</p>
<pre><code>Marke *a = new Marke [vec.capacity()];
copy(vec.begin(), vec.end(), a);
</code></pre>
<p>Dieser Code kopiert den kompletten Vektor in einen dynamischen Array welchen man nachher Binär abspeichern könnte. Um die Datei wieder zu lesen müsste man den Inhalt wieder in einen Array kopieren und mit push_back in einen Vektor kopieren. Etwas aufwendig, macht das Sinn?</p>
<p>Ich suche eine saubere und übersichtliche Lösung für ein eigenes Projekt. Was meint ihr?<br />
Danke für etwas 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/218889/vektor-serialisieren-oder-in-array-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 16:06:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218889.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Jul 2008 19:55:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sat, 26 Jul 2008 19:55:32 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich möchte einen Vektor in einen Data-Stream umwandeln um ihn anschliessend Binär zu speichern.</p>
<p>Der Vektor ist vom Typ Klasse.</p>
<p>Habe gelesen das es relativ umständlich ist einen vector zu serialisieren. Folgendes habe ich programmiert:</p>
<pre><code>Marke *a = new Marke [vec.capacity()];
copy(vec.begin(), vec.end(), a);
</code></pre>
<p>Dieser Code kopiert den kompletten Vektor in einen dynamischen Array welchen man nachher Binär abspeichern könnte. Um die Datei wieder zu lesen müsste man den Inhalt wieder in einen Array kopieren und mit push_back in einen Vektor kopieren. Etwas aufwendig, macht das Sinn?</p>
<p>Ich suche eine saubere und übersichtliche Lösung für ein eigenes Projekt. Was meint ihr?<br />
Danke für etwas 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/1554218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554218</guid><dc:creator><![CDATA[Typhoon]]></dc:creator><pubDate>Sat, 26 Jul 2008 19:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sat, 26 Jul 2008 20:18:54 GMT]]></title><description><![CDATA[<p>einen Vector einer unbekannten Klasse einfach so zu serialisieren kann problematisch werden. Wenn du Compiler wechselst (oder gar nur die Compilerflags!) kann es sein, dass deine Klasse eine andere binaere Darstellung erhaelt und du mit der &quot;alten Version&quot; erzeugte Dateien nicht mehr einlesen kannst. Wenn du es also ganz sauber machen willst, schau mal bei boost vorbei, da gibts eine &quot;saubere&quot; Klassenserialisierung.</p>
<p>Ansonsten waers nicht schlecht, wenn du einfach den operator&lt;&lt; von Klasse ueberladen wuerdest und dann einfach durch den vektor durchiterierst und ihn ueber den Stream ausgibst:</p>
<pre><code class="language-cpp">std::copy(v.begin(), v.end(), std::output_iterator&lt;Klasse&gt;(my_file_output));
</code></pre>
<p>via eines entsprechend ueberladenen operator&gt;&gt; kannst du die Daten dann ganz einfach wieder einlesen (am einfachsten tust du dich, wenn die Datei auch Informationen darueber enthaelt, wieviele Klasse-Objekte es gibt).</p>
<p>Und am haesslichsten ists schliesslich, wenn du einfach ueber ostream::write() die Daten binaer rausschreibst, aber das waer einfach nur noch haesslich <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>
<p>Mein Rat: ueberlad operator&gt;&gt; und operator&lt;&lt;, das ist vermutlich am leichtesten <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/1554226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554226</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sat, 26 Jul 2008 20:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sat, 26 Jul 2008 21:16:41 GMT]]></title><description><![CDATA[<p>Hallo</p>
<pre><code>vector&lt;char&gt; vec;
    vec.push_back('A');
	vec.push_back('B');

	ofstream ofs(&quot;xxx.bin&quot;, ios::binary);
	vector&lt;char&gt;::iterator output_iterator = vec.begin ();
	copy(vec.begin(), vec.end(), output_iterator&lt;char&gt;(ofs));
</code></pre>
<p>Wollte zum testen ein char-vector speichern. Bekomme aber den Fehler : error C2062: 'char'-Typ unerwartet.</p>
<p>Komisch... sieht jemand den Fehler? Ahja wie sieht dann eigentlich der Befehl zum schreiben ofs.write aus?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554258</guid><dc:creator><![CDATA[Typhoon]]></dc:creator><pubDate>Sat, 26 Jul 2008 21:16:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sat, 26 Jul 2008 22:00:00 GMT]]></title><description><![CDATA[<p>Typhoon schrieb:</p>
<blockquote>
<p>...Ich möchte einen Vektor ... Binär ... speichern....</p>
</blockquote>
<p>Lieber nicht.<br />
Natürlich geht es prinzipiell, hat aber kaum Vor- und viele Nachteile.</p>
<p>Wenn Du das hier ...</p>
<p>Typhoon schrieb:</p>
<blockquote>
<p>Ich suche eine saubere und übersichtliche Lösung für ein eigenes Projekt. Was meint ihr? ...</p>
</blockquote>
<p>... wirklich ernst meinst (und es ist ein wirklich guter Ansatz), dann speichere Deine Daten &quot;lesbar&quot; mittels operator&lt;&lt;().<br />
z.B. so ähnlich wie in :</p>
<pre><code class="language-cpp">ostream&amp; operator&lt;&lt;(ostream&amp; ost, myVector const&amp; v) {
   ost &lt;&lt; v.size() &lt;&lt; ' ';
   for(myVector::const_iterator it=v.begin(); it != v.end(); ++it) ost &lt;&lt; *it &lt;&lt; ' ';
   return ost &lt;&lt; '\n';
}
</code></pre>
<p>Du kannst mit Trennern&amp;Co. natürlich rumspielen, wie es Dir behagt und auch die vorangestellte Länge ist auch nur eine Möglichkeit, aber das direkte Verwenden von operator&lt;&lt;() (und zum Einlesen operator&gt;&gt;()) macht Vieles intuitiver und generischer.<br />
... und vor Allem der Verzicht auf eine &quot;Binärspeicherung&quot; umschifft zahllose Klippen, wofür Du im Laufe des Projekts noch danlbar sein wirst.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554267</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 26 Jul 2008 22:00:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sat, 26 Jul 2008 22:03:38 GMT]]></title><description><![CDATA[<p>Hab ich etwas verpeilt, da wirst du wohl recht haben.<br />
Ich arbeite mich morgen mehr in das Thema.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554271</guid><dc:creator><![CDATA[Typhoon]]></dc:creator><pubDate>Sat, 26 Jul 2008 22:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sun, 27 Jul 2008 08:01:05 GMT]]></title><description><![CDATA[<p>Guten Morgen</p>
<p>Ich habe den &lt;&lt; Operator mal überladen</p>
<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ost, CMyClass const&amp; v) { 
   ost &lt;&lt; v.get_name() &lt;&lt; ' ' &lt;&lt; v.get_infos(); 
   return ost &lt;&lt; '\n'; 
};
</code></pre>
<p>In der main mach ich dann</p>
<pre><code>for (vector&lt;CMyClass&gt;::const_iterator i = vec.begin(); i != vec.end(); ++i)
    schreiben &lt;&lt; *i;
</code></pre>
<p>um das ganze zu schreiben.</p>
<p>Funktioniert prima, was ich nicht hinkriege ist die for Schleife direkt in die Überladung einzubauen</p>
<pre><code>for(vector&lt;CMyClass&gt;::const_iterator it=v.begin(); it != v.end(); ++it) ost &lt;&lt; *it &lt;&lt; ' ';
</code></pre>
<p>Bekomme immer Fehler, kann ich da überhaupt auf den vector zugreifen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wenn man die Daten getrennt mit Leerzeichen in Textdateien schreibt kann es doch zu üblen Fehlern kommen wenn Inhalte vom vector auch Leerzeichen haben? Wie umgeht man das Problemt?</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554377</guid><dc:creator><![CDATA[Typhoon]]></dc:creator><pubDate>Sun, 27 Jul 2008 08:01:05 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sun, 27 Jul 2008 12:44:30 GMT]]></title><description><![CDATA[<p>Was bekommst du den für Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554521</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 27 Jul 2008 12:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sun, 27 Jul 2008 12:55:23 GMT]]></title><description><![CDATA[<pre><code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ost, vector&lt;CMyClass&gt; const&amp; v) { 
   ost &lt;&lt; v.size() &lt;&lt; ' '; 
   for(vector&lt;CMyClass&gt;::const_iterator it=v.begin(); it != v.end(); ++it) ost &lt;&lt; *it &lt;&lt; ' '; 
   return ost &lt;&lt; '\n'; 
}
</code></pre>
<p>Hatte einen kleinen Verständnisfehler, aber funktioniert noch nicht</p>
<p>error C2679: Binärer Operator '&lt;&lt;': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'const CMyClass' akzeptiert (oder keine geeignete Konvertierung möglich)</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554531</guid><dc:creator><![CDATA[Typhoon]]></dc:creator><pubDate>Sun, 27 Jul 2008 12:55:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sun, 27 Jul 2008 13:09:46 GMT]]></title><description><![CDATA[<p>Ist den ein &lt;&lt; - Operator für CMyClass definiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554542</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 27 Jul 2008 13:09:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor serialisieren oder in Array kopieren? on Sun, 27 Jul 2008 13:18:26 GMT]]></title><description><![CDATA[<p>Nein...</p>
<p>Jetzt gehts omg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554550</guid><dc:creator><![CDATA[Typhoon]]></dc:creator><pubDate>Sun, 27 Jul 2008 13:18:26 GMT</pubDate></item></channel></rss>