<?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[memcpy mit vector Array]]></title><description><![CDATA[<p>Ich habe eine Funktion die ein C-Array mit memcpy nutzt. Ich würde diese gerne auf ein vector array umstellen.</p>
<p>Dabei stellt sich mir die Frage ob ich dann memcpy nutzen kann und wenn nicht (was ich mal denke) dann wie ich dann ein vector array in ein anderes kopiere und wie schnell das im Vergleich zu memcpy ist.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181118/memcpy-mit-vector-array</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 04:15:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181118.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 May 2007 06:45:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to memcpy mit vector Array on Thu, 10 May 2007 06:45:11 GMT]]></title><description><![CDATA[<p>Ich habe eine Funktion die ein C-Array mit memcpy nutzt. Ich würde diese gerne auf ein vector array umstellen.</p>
<p>Dabei stellt sich mir die Frage ob ich dann memcpy nutzen kann und wenn nicht (was ich mal denke) dann wie ich dann ein vector array in ein anderes kopiere und wie schnell das im Vergleich zu memcpy ist.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282092</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Thu, 10 May 2007 06:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to memcpy mit vector Array on Thu, 10 May 2007 06:54:49 GMT]]></title><description><![CDATA[<p>memcpy() kannst du nicht verwenden, aber dafür hat vector&lt;&gt; einen Copy-Ctor und op= (beide für die Kopie aus einem anderen vector&lt;&gt;) sowie einen Ctor, der einen Iterator-Bereich entgegennehmen kann (geeignet für jeden Container mit eingebauter Iterator-Unterstüzung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282098</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 10 May 2007 06:54:49 GMT</pubDate></item><item><title><![CDATA[Reply to memcpy mit vector Array on Thu, 10 May 2007 07:00:58 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>memcpy() kannst du nicht verwenden, aber dafür hat vector&lt;&gt; einen Copy-Ctor und op= (beide für die Kopie aus einem anderen vector&lt;&gt;) sowie einen Ctor, der einen Iterator-Bereich entgegennehmen kann (geeignet für jeden Container mit eingebauter Iterator-Unterstüzung).</p>
</blockquote>
<p>Und wie verhält sich das bzgl der Geschwindigkeit? Zu memcpy habe ich im Netz nur gelesen das man es wegen der überragenden Geschwindigkeit wählt.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282103</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Thu, 10 May 2007 07:00:58 GMT</pubDate></item><item><title><![CDATA[Reply to memcpy mit vector Array on Thu, 10 May 2007 07:39:36 GMT]]></title><description><![CDATA[<p>Das ist etwas schwierig abzuschätzen - die vector&lt;&gt; Konstruktoren haben auf jeden Fall O(n) Laufzeit, aber sie könnten etwas langsamer sein als memcpy() (wegen fehlender Optimierungsmöglichkeiten).<br />
(im Zweifelsfall hilft nur eins: benötigte Zeit stoppen - und feststellen, ob die Kopiererei wirklich der Engpass des Programms ist)</p>
<p>Der springende Punkt ist ganz einfach, daß die C Speicherverwaltung von unstrukturierten Daten ausgeht - memcpy() hat keine Ahnung von Copy-Konstruktoren oder Zuweisungsoperatoren, wodurch du dir recht schnell deine Daten pulverisieren kannst:</p>
<pre><code class="language-cpp">string data1 = &quot;Hallo Welt&quot;;
string data2;
memcpy(data2,data1,sizeof(string));//BUMM
</code></pre>
<p>(normalerweise wird durch das Zusammenspiel von Copy-Ctor, op= und Dtor sichergestellt, daß jeder String weiß, wem die Zeichendaten gehören (egal ob per Referenzzählung oder als tiefe Kopie). memcpy() funkt hier dazwischen, indem es eine flache Kopie erzeugt - also versuchen letztendlich beide Strings, mit den selben Daten zu arbeiten (und das ohne voneinander zu wissen). Der Aufruf wird noch problemlos funktionieren, aber spätestens im Dtor von data1 fliegt dir eine Access Violation um die Ohren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282123</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 10 May 2007 07:39:36 GMT</pubDate></item><item><title><![CDATA[Reply to memcpy mit vector Array on Thu, 10 May 2007 07:47:54 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>memcpy() kannst du nicht verwenden, aber dafür hat vector&lt;&gt; einen Copy-Ctor und op= (beide für die Kopie aus einem anderen vector&lt;&gt;) sowie einen Ctor, der einen Iterator-Bereich entgegennehmen kann (geeignet für jeden Container mit eingebauter Iterator-Unterstüzung).</p>
</blockquote>
<p>Und wie verhält sich das bzgl der Geschwindigkeit?</p>
</blockquote>
<p>Das ist abhängig von der gewählten STL-Implementation. Im Zweifelsfall hilft messen mehr als spekulieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282129</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Thu, 10 May 2007 07:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to memcpy mit vector Array on Thu, 10 May 2007 08:29:19 GMT]]></title><description><![CDATA[<p>Laut diesem Thread <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-180883.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-180883.html</a><br />
und meinen Erfahrungen <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=";D"
      alt="😉"
    /> liegen die Elemente in einem Vector doch aber hintereinander. Ergo koennte man doch auch memcpy nutzen, um eine Kopie zu erzeugen oder? (natuerlich besser nur für Typen ohne Konstrutor).</p>
<pre><code class="language-cpp">vector&lt;int&gt; v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);

vector&lt;int&gt; v2;
v2.resize(v1.size());
memcpy(&amp;v1[0], &amp;v2[0], v1.size() * sizeof(int));
</code></pre>
<p>Ungetestet. Aber prinzipiell richtig oder falsch?</p>
<p>Gruss,<br />
DeSoVoDaMu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282167</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Thu, 10 May 2007 08:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to memcpy mit vector Array on Fri, 11 May 2007 08:00:34 GMT]]></title><description><![CDATA[<p>Jup, solange der Elementtyp T per memcpy kopierbar ist, geht das. Bevor man sowas macht, sollte man aber prüfen, ob es in der konkreten Situation auch irgendwas bringt. Ansonsten ist ne simple Zuweisung bzw. ein range-insert schlicht hübscher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282820</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 11 May 2007 08:00:34 GMT</pubDate></item></channel></rss>