<?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 - Fragen zu vector]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich arbeite gerade viel mit Vectoren anstatt mit arrays. Nun wollte ich einen Bereich aus einem Array einem Vektor zuweisen. Muss ich das mit einer Schleife machen und jedes einzelne Element mit push_back in den vector stecken oder geht das auch schneller? Also irgendwas mit insert(Bereich von bis). Wenn es sowas gibt ist das dann schneller als push_back oder genauso langsam?</p>
<p>Effizienz: Sind vectoren effizienter als arrays oder ist es besser arrays zu nehmen. Da ich ein grosses Programm laufen habe das hauptsaechlich zur Optimierung dient und daher schnell laufen sollte waere das wichtig fuer mich.</p>
<p>Vielen Dank fuer jede Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/132806/stl-fragen-zu-vector</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 15:12:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/132806.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Jan 2006 10:02:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 10:02:04 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich arbeite gerade viel mit Vectoren anstatt mit arrays. Nun wollte ich einen Bereich aus einem Array einem Vektor zuweisen. Muss ich das mit einer Schleife machen und jedes einzelne Element mit push_back in den vector stecken oder geht das auch schneller? Also irgendwas mit insert(Bereich von bis). Wenn es sowas gibt ist das dann schneller als push_back oder genauso langsam?</p>
<p>Effizienz: Sind vectoren effizienter als arrays oder ist es besser arrays zu nehmen. Da ich ein grosses Programm laufen habe das hauptsaechlich zur Optimierung dient und daher schnell laufen sollte waere das wichtig fuer mich.</p>
<p>Vielen Dank fuer jede Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965266</guid><dc:creator><![CDATA[Samo]]></dc:creator><pubDate>Fri, 13 Jan 2006 10:02:04 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 10:13:54 GMT]]></title><description><![CDATA[<p>Das musst du in einer Schleife machen.<br />
std::vector ist eigentlich nur ein schlanker Wrapper für ein herkömmliches dynamisches Array (also Typ*). Daher sollte es laut Standard mindestens genauso schnell sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965282</guid><dc:creator><![CDATA[hagman]]></dc:creator><pubDate>Fri, 13 Jan 2006 10:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 10:27:15 GMT]]></title><description><![CDATA[<p>Du kannst assign oder insert nehmen. Die Methoden für &quot;Range&quot;-Zugriffe sollten <em>immer</em> handgeschriebenen Schleifen bevorzugt werden. (Siehe Effective-STL von Scott Meyers)</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; klaus;
int array[20] = {1, 2, 3};

klaus.insert( array, array+20);
klaus.assign( array, array+20);
</code></pre>
<p>Dem Vektor wäre es in diesem Beispiel möglich zu erkennen (durch Spezialisierung), wieviele Elemente eingefügt werden und könnte sich somit vorher einmal die passende Größe reservieren, anstatt ständig zu wachsen. Dass das für das Einfügen aus einer linearen Liste (z.B. std::list) nicht funktionieren kann, ist hoffentlich klar (die Länge einer linearen Liste zu ermitteln benötigt lineare Zeit, was nicht mehr zu rechtfertigen wäre, da man eh schon einmal über jedes Element iteriert).</p>
<p>Falls du mehr Wissen hast als der Bauer der STL über deine Implementation haben kann (z.B. Länge der linearen Liste), so kannst du vor dem Einfügen ein händisches reserve auf den Vektor machen und somit ständige Neuallokationen verhindern.</p>
<p>Solange man Vektoren nicht grob fahrlässig benutzt, sind sie in etwa genausoschnell wie blanke arrays.</p>
<p>Immerhin wächst der Vektor bei Vergrößerung nicht linear, sonder polynomial (genauer: 2*size), was die Performance-Einbußen für Reallokation in Grenzen hält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965284</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 13 Jan 2006 10:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 10:18:46 GMT]]></title><description><![CDATA[<p>Zum einfügen kannst du auch insert nehmen:</p>
<pre><code class="language-cpp">char array[100];
vector&lt;char&gt; vec;
vec.insert(vec.start(),array+10,array+20);//fügt den 10. bis 19. Buchstaben aus dem Array in den Vektor ein
</code></pre>
<p>Achja, falls du vorhandene Vektor-Elemente überschreiben willst, nimm lieber std::copy()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965287</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Fri, 13 Jan 2006 10:18:46 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 10:28:25 GMT]]></title><description><![CDATA[<p>Ui, o.k., da habe ich ja ne ganze Menge Moeglichkeiten. Ich glaube ich sollte mir wirklich mal das Buch besorgen.</p>
<p>Jetzt bleibt trotzdem die Frage welche der Moeglichkeiten die effektivste ist, wenn ich die Laenge meines 3 dimensionalen arrays kenne und einfach die erste Dimension einfuegen will, also von 0 - N (wenn das array N x 3 ist). Kann ich da einfach die Methode nehmen die mir am besten gefaellt oder gibts zwischen den einzelnen Methoden schon nochmal Laufzeitunterschiede bzw Speicherplatzanspruch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965296</guid><dc:creator><![CDATA[Samo]]></dc:creator><pubDate>Fri, 13 Jan 2006 10:28:25 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 10:36:46 GMT]]></title><description><![CDATA[<p>insert fügt an, assign setzt den Inhalt neu. <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>Es gibt übrigens auch Range-Konstruktoren:</p>
<pre><code>int array[20] = {5, 6, 7};
std::vector&lt;int&gt; harry( array, array+20);
</code></pre>
<p>Vielleicht interessant für dich zu wissen: Wird ein Vektor kleiner, so gibt er seinen Speicher, den er schon besitzt, <em>nicht</em> wieder frei. Willst du das aber, so musst du soetwas in der Art machen:</p>
<pre><code>std::vector&lt;int&gt; klaus( 100U, 0); // 100 mal 0 einfügen
klaus.clear(); // Inhalt ist weg, Speicher bleibt aber belegt
{
  std::vector&lt;int&gt; harry; // Leerer Vektor ohne Speicher
  harry.swap( klaus); // Inhalte, d.h. Speicher tauschen
} // jetzt wird harry zerstört, und damit auch der ursprüngliche Speicher von klaus. klaus besitzt jetzt keinen Speicher mehr
</code></pre>
<p>Zu solchen Fragen kann ich dir wirklich nur das Buch Effective STL nahelegen. <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/965307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965307</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 13 Jan 2006 10:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 10:44:52 GMT]]></title><description><![CDATA[<p>O.k., ich sehs ja ein, ich werde mir das Buch besorgen ;-). Wahrscheinlich habe ich in meinem Programm noch einige Schnitzer was STL anbelangt.</p>
<p>Vielen Dank fuer die schnellen Antworten. Einen schoenen Tag noch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965318</guid><dc:creator><![CDATA[Samo]]></dc:creator><pubDate>Fri, 13 Jan 2006 10:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 11:04:18 GMT]]></title><description><![CDATA[<p>Sorry, jetzt ist doch noch ein Problem aufgetreten. Ich wollte das mit dem Konstruktor ausprobieren. Allerdings bekomme ich folgende Fehlermeldung:</p>
<p>error C2668: 'std::_Iter_cat' : ambiguous call to overloaded function</p>
<p>mein Aufruf sieht folgendermassen aus:<br />
vector&lt;double&gt; vAlpha(alpha[taud*N],alpha[taud*N]+N);</p>
<p>Geht das doch nicht, wenn ich fuer jede Dimension meines Arrays einen Vector anlegen will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965345</guid><dc:creator><![CDATA[Samo]]></dc:creator><pubDate>Fri, 13 Jan 2006 11:04:18 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 11:11:10 GMT]]></title><description><![CDATA[<p>Zeig mal die Definition von taud.</p>
<p>Vermutlich musst du aber</p>
<pre><code class="language-cpp">vector&lt;double&gt; vAlpha(&amp;alpha[taud*N],&amp;alpha[taud*N]+N);
</code></pre>
<p>schreiben.</p>
<p>Der Grund dafür ist: Ein Array (bei dir alpha) konvertiert implizit in einen Pointer auf das erste Element (und eignet sich deshalb für einen Range-Konstruktor, da ein Zeiger als Random-Access-Iterator behandelt wird). Der []-Zugriff auf ein Array liefert aber eine Referenz an die entsprechende Stelle und keinen Pointer. Deshalb reicht es wohl vermutlich auch, den Adressoperator anzuwenden.</p>
<p>Btw, mit [cpp]-Tags sieht das viel schicker und leserlicher aus <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/965346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965346</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 13 Jan 2006 11:11:10 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 11:12:38 GMT]]></title><description><![CDATA[<p>Mit dem Adressoperator funktionierts <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>Was sind denn [cpp]-flags?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965352</guid><dc:creator><![CDATA[Samo]]></dc:creator><pubDate>Fri, 13 Jan 2006 11:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 11:14:55 GMT]]></title><description><![CDATA[<p>Ups, meinte natuerlich [cpp]-Tags</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965355</guid><dc:creator><![CDATA[Samo]]></dc:creator><pubDate>Fri, 13 Jan 2006 11:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 11:16:40 GMT]]></title><description><![CDATA[<p>Nicht flags sondern Tags <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>Wenn du vor und hinter C++ Code das hier schreibst:</p>
<pre><code class="language-cpp">Irgendwelcher C/C++ Code
</code></pre>
<p>, dann wird der schick eingefärbt und ist viel besser lesbar. Und auch die Formatierung bleibt erhalten.</p>
<pre><code class="language-cpp">und
</code></pre>
<p>nennt man Tags <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="😉"
    /> Die werden normalerweise automatisch vom Board umgesetzt. Nur jetzt bei mir gerade nicht, weil ich bei &quot;BBCode in diesem Beitrag deaktivieren&quot; ein Häkchen gesetzt habe. Guck dir mal andere Beiträge im Forum an, dann siehst du es ganz schnell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965358</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 13 Jan 2006 11:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to STL - Fragen zu vector on Fri, 13 Jan 2006 11:18:13 GMT]]></title><description><![CDATA[<p>Ah jetzt verstehe ich. Cool, danke, wieder was gelernt :-).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965360</guid><dc:creator><![CDATA[Samo]]></dc:creator><pubDate>Fri, 13 Jan 2006 11:18:13 GMT</pubDate></item></channel></rss>