<?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[aus Vector Array machen]]></title><description><![CDATA[<p>Hallo.<br />
Ich bin momentan dabei ein Klassendesign für DirectX zu schreiben.<br />
Da ich als nächstes die Farbpalette als Klasse implementieren möchte, habe ich folgendes Problem:<br />
Die DirectX Funktionen nehmen als Parameter immer Arrays von PALETTEENTRY-Strukturen. Ich will aber statt Arrays einen vector verwenden. Nun stehe ich aber vor dem Problem, dass die DirectX-Funktionen wahrscheinlich (ich hab es nicht ausprobiert) keinen vector als Parameter akzeptieren. Gibt es deshalb eine Möglichkeit (außer dem lästigen kopieren über eine for-Schleife) aus einem Vector ein normales Array zu machen?<br />
Oder sollte man in diesem Fall lieber ein normales Array verwenden statt des vectors?<br />
Danke!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180789/aus-vector-array-machen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 22:34:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180789.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 May 2007 17:24:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 17:24:06 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich bin momentan dabei ein Klassendesign für DirectX zu schreiben.<br />
Da ich als nächstes die Farbpalette als Klasse implementieren möchte, habe ich folgendes Problem:<br />
Die DirectX Funktionen nehmen als Parameter immer Arrays von PALETTEENTRY-Strukturen. Ich will aber statt Arrays einen vector verwenden. Nun stehe ich aber vor dem Problem, dass die DirectX-Funktionen wahrscheinlich (ich hab es nicht ausprobiert) keinen vector als Parameter akzeptieren. Gibt es deshalb eine Möglichkeit (außer dem lästigen kopieren über eine for-Schleife) aus einem Vector ein normales Array zu machen?<br />
Oder sollte man in diesem Fall lieber ein normales Array verwenden statt des vectors?<br />
Danke!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279813</guid><dc:creator><![CDATA[Amateur]]></dc:creator><pubDate>Sun, 06 May 2007 17:24:06 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 17:37:52 GMT]]></title><description><![CDATA[<p>wenn 'v' der vector ist, probier's mit: '&amp;v.front()'<br />
<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/1279819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279819</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sun, 06 May 2007 17:37:52 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 17:42:45 GMT]]></title><description><![CDATA[<p>Amateur schrieb:</p>
<blockquote>
<p>Hallo.<br />
Ich bin momentan dabei ein Klassendesign für DirectX zu schreiben.<br />
Da ich als nächstes die Farbpalette als Klasse implementieren möchte, habe ich folgendes Problem:<br />
Die DirectX Funktionen nehmen als Parameter immer Arrays von PALETTEENTRY-Strukturen. Ich will aber statt Arrays einen vector verwenden. Nun stehe ich aber vor dem Problem, dass die DirectX-Funktionen wahrscheinlich (ich hab es nicht ausprobiert) keinen vector als Parameter akzeptieren. Gibt es deshalb eine Möglichkeit (außer dem lästigen kopieren über eine for-Schleife) aus einem Vector ein normales Array zu machen?<br />
Oder sollte man in diesem Fall lieber ein normales Array verwenden statt des vectors?<br />
Danke!!!</p>
</blockquote>
<p>Ein Array ist auch nur ein Zeiger auf einen Speicherbereich.</p>
<ol>
<li></li>
</ol>
<pre><code class="language-cpp">MyFunction(PALETTEENTRY* p,size_t n);
//...
std::vector&lt;PALETTEENTRY&gt; vec;
// push_back etc.
PALETTEENTRY* p  = &amp;(vec[0]);
MyFunction(p,vec.size());
</code></pre>
<p>..und beten dass die PALETTEENTRYs richtig im Speicher liegen</p>
<ol start="2">
<li></li>
</ol>
<pre><code class="language-cpp">PALETTEENTRY* p = new PALETTEENTRY[n];
</code></pre>
<p>statt vector.</p>
<p>Grüsse</p>
<p>*thix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279820</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sun, 06 May 2007 17:42:45 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 17:47:09 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/34745">@pale</a> dog: Mhhh, ja das habe ich auch schon bei Google gefunden. Allerdings gibt dies ja nur die Adresse des ersten Elements des Vectors wieder. Wenn die weiteren Elemente des Vectors nicht direkt hinter dem ersten Element im Speicher liegen, könnte es Probleme geben oder?<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15778">@Gast</a>++: Bei deinem Beispiel mit dem vector ist es ja auch so dass die Paletteentries richtig im Speicher liegen müssen.<br />
Das Problem ist halt, dass ich nicht weiß wie die DirectX-Funktionen mit dem übergebenen Array arbeiten. Und wenn ich dann die Adresse von vector.front() übergebe und die Paletteentries nicht so im Speicher liegen wie das bei einem normalen Array der Fall ist, dürfte das Ganze nicht funktionieren oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279821</guid><dc:creator><![CDATA[Amateur]]></dc:creator><pubDate>Sun, 06 May 2007 17:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 17:45:28 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>Ein Array ist auch nur ein Zeiger auf einen Speicherbereich.</p>
</blockquote>
<p>nö <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>Amateur schrieb:</p>
<blockquote>
<p>Allerdings gibt dies ja nur die Adresse des ersten Elements des Vectors wieder. Wenn die weiteren Elemente des Vectors nicht direkt hinter dem ersten Element im Speicher liegen, könnte es Probleme geben oder?</p>
</blockquote>
<p>stimmt. wenn du ganz sicher gehen willst, dann mach's ohne 'vector'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279830</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sun, 06 May 2007 17:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 18:01:40 GMT]]></title><description><![CDATA[<p>Amateur schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/34745">@pale</a> dog: Mhhh, ja das habe ich auch schon bei Google gefunden. Allerdings gibt dies ja nur die Adresse des ersten Elements des Vectors wieder. Wenn die weiteren Elemente des Vectors nicht direkt hinter dem ersten Element im Speicher liegen, könnte es Probleme geben oder?</p>
</blockquote>
<p>Nein. Bei einem Vector ist es sichergestellt, daß die Elemente hintereinander im Speicher liegen.</p>
<p>Kann man hier nachlesen: <a href="http://www.sgi.com/tech/stl/Vector.html" rel="nofollow">http://www.sgi.com/tech/stl/Vector.html</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279832</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 06 May 2007 18:01:40 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 18:24:07 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>Gast++ schrieb:</p>
<blockquote>
<p>Ein Array ist auch nur ein Zeiger auf einen Speicherbereich.</p>
</blockquote>
<p>nö <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>
</blockquote>
<pre><code class="language-cpp">int foo[42];
int bar[6][7];
int* baz = (int*)malloc(42*sizeof(int));
</code></pre>
<p>Und wo siehst Du jetzt einen Unterschied zwischen foo, bar und baz?</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279851</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sun, 06 May 2007 18:24:07 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 18:24:08 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bin der Ansicht, dass man ruhig die Mittel der Standardbibliothek verwenden kann. Vgl.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

int main() {
        vector&lt;int&gt; v(15);

        int *a = new int[v.size()];
        copy(v.begin(), v.end(), a);

        delete[] a;
}
</code></pre>
<p>Wenn wirklich die Performance des resultierenden Programms im Mittelpunkt steht, würde man ohne hin keinen Vektor verwenden, sondern ein Array im Stil von C. Was haltet ihr von meiner Meinung? <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>
<p>Grüße<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279852</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 06 May 2007 18:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 18:37:48 GMT]]></title><description><![CDATA[<p>lucky_tux schrieb:</p>
<blockquote>
<p>Hallo zusammen,</p>
<p>Wenn wirklich die Performance des resultierenden Programms im Mittelpunkt steht, würde man ohne hin keinen Vektor verwenden, sondern ein Array im Stil von C. Was haltet ihr von meiner Meinung? <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>
<p>Grüße<br />
Martin</p>
</blockquote>
<p>Ich habe den Performanceunterschied zwischen dem Vector und einem C-Array vor kurzem mal gemessen. Dabei ist heraus gekommen, daß nur dann ein Unterschied besteht, wenn man mittels Zeigerarithmetik durch das C-Array iteriert. Bei Benutzung der Index-Schreibweise waren beide genau gleich schnell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279874</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 06 May 2007 18:37:48 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 18:38:51 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>pale dog schrieb:</p>
<blockquote>
<p>Gast++ schrieb:</p>
<blockquote>
<p>Ein Array ist auch nur ein Zeiger auf einen Speicherbereich.</p>
</blockquote>
<p>nö <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>
</blockquote>
<pre><code class="language-cpp">int foo[42];
int bar[6][7];
int* baz = (int*)malloc(42*sizeof(int));
</code></pre>
<p>Und wo siehst Du jetzt einen Unterschied zwischen foo, bar und baz?</p>
<p>Grüsse</p>
<p>*this</p>
</blockquote>
<p>uh...<br />
foo[1] ist ein int<br />
bar[1] ist ein int[7]<br />
und sizeof(baz) != sizeof(bar)<br />
free(foo) ist eher ungesund, free(baz) dagegen notwendig...<br />
willst du noch mehr haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279876</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 06 May 2007 18:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 18:41:19 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>Und wo siehst Du jetzt einen Unterschied zwischen foo, bar und baz?</p>
<pre><code class="language-cpp">int foo[42];
int bar[6][7];
int* baz = (int*)malloc(42*sizeof(int));
</code></pre>
</blockquote>
<p>wieso sollte da kein unterschied sein? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1279879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279879</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sun, 06 May 2007 18:41:19 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 19:12:49 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Gast++ schrieb:</p>
<blockquote>
<p>pale dog schrieb:</p>
<blockquote>
<p>Gast++ schrieb:</p>
<blockquote>
<p>Ein Array ist auch nur ein Zeiger auf einen Speicherbereich.</p>
</blockquote>
<p>nö <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>
</blockquote>
<pre><code class="language-cpp">int foo[42];
int bar[6][7];
int* baz = (int*)malloc(42*sizeof(int));
</code></pre>
<p>Und wo siehst Du jetzt einen Unterschied zwischen foo, bar und baz?</p>
<p>Grüsse</p>
<p>*this</p>
</blockquote>
<p>uh...<br />
foo[1] ist ein int<br />
bar[1] ist ein int[7]<br />
und sizeof(baz) != sizeof(bar)<br />
free(foo) ist eher ungesund, free(baz) dagegen notwendig...<br />
willst du noch mehr haben?</p>
</blockquote>
<p>Nein, denn sind sind alles nur Zeiger auf Speicherbereiche;<br />
ich hatte nicht auch nach bar[1] gefragt, sondern nach bar;</p>
<p>Ob nun von Stack oder Heap ist eine ganz andere Frage.</p>
<p>Grüsse</p>
<p>*ths</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279899</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sun, 06 May 2007 19:12:49 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 19:15:47 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>Nein, denn sind sind alles nur Zeiger auf Speicherbereiche;</p>
</blockquote>
<p>arrays sind keine zeiger. du kannst z.b. ein array nicht umbiegen (wie einen zeiger).<br />
<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/1279901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279901</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sun, 06 May 2007 19:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 19:37:22 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>Nein, denn sind sind alles nur Zeiger auf Speicherbereiche;</p>
</blockquote>
<p>Dass etwas auf einen Speicherbereich verweist, macht es nicht zu einem Zeiger. Alle Lvalues (und manche Rvalues) tun das.</p>
<p>Gast++ schrieb:</p>
<blockquote>
<p>ich hatte nicht auch nach bar[1] gefragt, sondern nach bar;</p>
</blockquote>
<p>Du hast überhaupt nur rhetorisch formuliert. Da ist ganz offensichtlich überhaupt keine Frage dahinter sondern der Wille, deine Ansicht unbeirrt zu vertreten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279915</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 06 May 2007 19:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 20:43:44 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Gast++ schrieb:</p>
<blockquote>
<p>Nein, denn sind sind alles nur Zeiger auf Speicherbereiche;</p>
</blockquote>
<p>Dass etwas auf einen Speicherbereich verweist, macht es nicht zu einem Zeiger.</p>
</blockquote>
<p>Camper, so sehr ich Deine technische Kompetenz schätze um so mehr langweilen mich Deine rhetorischen Gehversuche.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Gast++ schrieb:</p>
<blockquote>
<p>ich hatte nicht auch nach bar[1] gefragt, sondern nach bar;</p>
</blockquote>
<p>Du hast überhaupt nur rhetorisch formuliert. Da ist ganz offensichtlich überhaupt keine Frage dahinter sondern der Wille, deine Ansicht unbeirrt zu vertreten.</p>
</blockquote>
<p>Geht's noch?</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279949</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sun, 06 May 2007 20:43:44 GMT</pubDate></item><item><title><![CDATA[Reply to aus Vector Array machen on Sun, 06 May 2007 22:26:48 GMT]]></title><description><![CDATA[<p>Immer ruhig mit den Pferden, Jungs.</p>
<p>Worauf Gast++ vermutlich hinaus will, ist, dass Arrays &quot;fast immer&quot; zu Pointern &quot;degenerieren&quot; - und das ist ja schonmal nicht so falsch. Und spätestens wenn man ein Array dynamisch anlegen möchte, bekommt man sowieso nur einen POinter darauf in die Hand....<br />
Allerdings ist die Aussage &quot;Arrays = Pointer&quot; eben doch bei etwas genauerer Betrachtung nicht richtig - trotzdem IMO für beide Seiten kein Grund, hier die großen Rhetorikpeitschen auszupacken.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279993</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 06 May 2007 22:26:48 GMT</pubDate></item></channel></rss>