<?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[Iteratoren langsam? Vorteile?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Programm dass ich profile.<br />
Ich bemerke dass nahezu 80% meiner Zeit auf iteratoren drauf gehen.<br />
Jetzt würde ich gerne wissen ob iteratoren aus der stl von haus aus etwas langsamer sind und wenn ja - warum?</p>
<p>Das würde bedeuten bei statischen konstrukten immer mit array und festen grössen zu arbeiten um möglichst shcnell zu bleiben - stimmt das?</p>
<p>Worin liegen denn dann die vorteile in iteratoren? Dass sie nicht über die array-grenzen hinaus schießen?</p>
<p>Danke euch <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/163640/iteratoren-langsam-vorteile</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 11:43:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163640.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Oct 2006 16:24:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 16:24:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Programm dass ich profile.<br />
Ich bemerke dass nahezu 80% meiner Zeit auf iteratoren drauf gehen.<br />
Jetzt würde ich gerne wissen ob iteratoren aus der stl von haus aus etwas langsamer sind und wenn ja - warum?</p>
<p>Das würde bedeuten bei statischen konstrukten immer mit array und festen grössen zu arbeiten um möglichst shcnell zu bleiben - stimmt das?</p>
<p>Worin liegen denn dann die vorteile in iteratoren? Dass sie nicht über die array-grenzen hinaus schießen?</p>
<p>Danke euch <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/1165497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165497</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Tue, 31 Oct 2006 16:24:04 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 16:31:58 GMT]]></title><description><![CDATA[<p>Zunächst mal die Frage: Langsamer als was?<br />
Zweite Frage: Du hast aber schon im Release-Modus kompiliert?</p>
<p>Denn einige STL-Implementierungen haben im Debug-Modus tolle Sicherheitsüberprüfungen eingebaut, die im Release-Modus wegfallen. In vielen Implementierungen sind zum Beispiel die Iteratoren von vector&lt;T&gt; einfach T*, also genauso schnell wie normale Zeiger.</p>
<p>Der wesentliche Vorteil von Iteratoren ist, daß sie eine Abstraktion vom Container schaffen und so Algorithmen auf ihnen unbekannten Containern arbeiten können. Die meisten Iteratoren bieten keine zusätzlichen Checks, obwohl das natürlich möglich wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165507</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Tue, 31 Oct 2006 16:31:58 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 17:29:50 GMT]]></title><description><![CDATA[<p>langsamer als statische arrays mein ich.</p>
<p>Ich compiliere nicht im debug modus. ganz &quot;normal&quot; so wies dann im ergebnis laufen sollte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165582</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Tue, 31 Oct 2006 17:29:50 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 17:43:28 GMT]]></title><description><![CDATA[<p>Also eigentlich sollte ein std::vector nicht langsamer sein als ein statisches Array (es sei denn Du nutzt exzessiv, daß der vector wachsen kann, das bezahlt man natürlich). Bei ner std::list kann das natürlich ganz anders aussehen.</p>
<p>Kannst Du vielleicht ein bißchen konkreter werden was Du tust, oder vielleicht nen kleinen Codeausschnitt posten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165595</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Tue, 31 Oct 2006 17:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 18:32:12 GMT]]></title><description><![CDATA[<p>Benutzt du Visual C++? Dort habe ich festgestellt das zum Beispiel</p>
<pre><code class="language-cpp">std::string s = ...;
std::vector&lt;char&gt; v(s.begin(), s.end());
</code></pre>
<p>viel langsamer ist als</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; v(&amp;s[0], &amp;s[s.length()]);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1165631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165631</guid><dc:creator><![CDATA[........]]></dc:creator><pubDate>Tue, 31 Oct 2006 18:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 18:39:42 GMT]]></title><description><![CDATA[<p>mit dem iterator ein array duchgehen sollte schneller sein als mit [], da der iterator doch dem pointer entspricht.</p>
<p><a href="https://duckduckgo.com/?q=isbn+3526520887&amp;cppnetbooks" rel="nofollow">Halloween | ISBN: 3526520887</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165636</guid><dc:creator><![CDATA[dingens]]></dc:creator><pubDate>Tue, 31 Oct 2006 18:39:42 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 18:45:33 GMT]]></title><description><![CDATA[<p>Naja, auf jeden Fall keine &quot;checked&quot; iteratoren verwenden, gelle <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="🙂"
    /><br />
Mach mal den hier in dein Programm rein wenn du MSVC 8 verwendest:</p>
<pre><code class="language-cpp">#define HLP1(x) HLP2(x)
#define HLP2(x) HLP3(#x)
#define HLP3(x) x
#pragma message(&quot;_SECURE_SCL: &quot; HLP1(_SECURE_SCL))
</code></pre>
<p>Wenn da was anderes als &quot;_SECURE_SCL: 0&quot; steht dann is klar was faul ist.</p>
<p>MSDN schrieb:</p>
<blockquote>
<p>_SECURE_SCL<br />
If defined as 1, unsafe iterator use causes a runtime error. If defined as 0, checked iterators are disabled. The exact behavior of the runtime error depends on the value of _SECURE_SCL_THROWS. The default value for _SECURE_SCL is 1, meaning checked iterators are enabled by default.</p>
</blockquote>
<p>Die Schweine nämlich. Das is im Release auch defaultmässig 1 (habs grad noch extra ausprobiert). Hmpf. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165641</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 31 Oct 2006 18:45:33 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 18:49:29 GMT]]></title><description><![CDATA[<blockquote>
<p>mit dem iterator ein array duchgehen sollte schneller sein als mit [], da der iterator doch dem pointer entspricht.</p>
</blockquote>
<p>Ja erstens geht hier eh niemand mit [] spazieren, und zweitens stimmt das nicht unbedingt weil Compiler gottseidank schli-schla-schlau sind und ganz gut optimieren können. Aus einem...</p>
<pre><code class="language-cpp">int lala[100];
// ...
for(unsigned i = 0; i &lt; 100; i++)
    lala[i] += 123;
</code></pre>
<p>...wird im generierten Code ganz schnell eine Schleife mit &quot;walking pointer&quot; und &quot;pointer != end&quot; als Abbruchbedingung. Selbst schon gesehen, kannste mir glauben <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/1165645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165645</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 31 Oct 2006 18:49:29 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 18:56:03 GMT]]></title><description><![CDATA[<p>also is es schneller als [], nur weil der compiler möglicher weise beim optimeren das gleiche draus macht is [] nicht genauso schnell</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165649</guid><dc:creator><![CDATA[dingens]]></dc:creator><pubDate>Tue, 31 Oct 2006 18:56:03 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 19:08:57 GMT]]></title><description><![CDATA[<p>Nur so als Anmerkung am Rande: nur weil 80% deiner Zeit bei der Arbeit mit Iteratoren drauf gehen, heißt das nicht, dass da etwas faul ist, wenn dein Programm eben so ausschaut, dass viel mit Iteratoren (lies: Zeigern) arbeitet.<br />
Normal sollte der Unterschied zwischen einem Zeiger und einem Iterator kaum spürbar sein bis gar nicht spürbar sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165667</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Tue, 31 Oct 2006 19:08:57 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Tue, 31 Oct 2006 19:20:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13970">@lolz</a>: er schreibt aber schon dass es langsamer <strong>ist</strong>. Was soll dann der Hinweis dass es nicht langsamer sein muss?!? Keks <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="🙂"
    /><br />
Und z.B. checked iterator sind langsam, das sollte auch jedem klar sein. Genauso wie z.B. iterator von std::deque&lt;T&gt;.</p>
<p>@dingens: Jajablabla. Aber sag mal, wo hier siehst du bitte jmd. der über nen array/vector mit [] drübergeht? (Meine Antwort auf dein Posting natürlich ausgenommen)<br />
Also ich finde das in dem Thread hier nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165681</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 31 Oct 2006 19:20:27 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Wed, 01 Nov 2006 15:04:15 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Die Schweine nämlich. Das is im Release auch defaultmässig 1 (habs grad noch extra ausprobiert). Hmpf. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
</blockquote>
<p>Die Release-Version beim VC 2005 ist generell nicht so sehr auf optimiale Performanz aus wie das früher der Fall war. Es werden z.B. trotzdem Debug-Symbol generiert und einige Sicherheitschecks bleiben auch an (z.B der Buffer-Security-Check). Man kann da also noch einiges rausholen. Auf der anderen Seite ist die Release-Konfiguration für die meisten Programme in meinen Augen ein guter Kompromiss zwischen Performanz und Sicherheit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1166315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1166315</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 01 Nov 2006 15:04:15 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Wed, 01 Nov 2006 22:36:43 GMT]]></title><description><![CDATA[<p>schon mal danke...vielleicht könnt ihr mir ja dann ein wenig helfen bei meinem optimierungsproblem...</p>
<p>also vorweg: ich arbeite mit debian linux mit kdevelop3<br />
Compiler: gcc3.4.3 (ich weiß - net der neueste)</p>
<p>Funktionsweise:<br />
Ich habe eine Matrix in einem vector gespeichert. Die werte sind von oben nach unten und nicht wie üblich von links nach rechts gespeichert - d.h. sie ist SPALTENWEISE gespeichert - d.h. zuerst die werte der ersten spalte, dann der zweiten usw.<br />
Jetzt möchte ich alle ZEILEN der matrix löschen in denen ALLE einträge Null sind. Dies ist schwieriger weil ich ja Spaltenweise gespeichert habe - daran ist leider nix zu ändern.</p>
<p>Mein versuch im moment ist dieser:</p>
<pre><code class="language-cpp">void 
 myClass::Lösche_alle_Nullzeilen(std::vector&lt; double &gt;&amp; matrix, 
                       int&amp; x_dim, 
                       int&amp; y_dim, 
                       const int col, 
                       int&amp; idx) 
 { 
     std::vector&lt; bool &gt;     mask( y_dim ); 

     for ( int y = 0; y &lt; y_dim; ++y ) 
     { 
         mask[ y ] = true; 
         if(y == col) 
         { 
             mask[ y ] = false; 
             continue; 
         } 
         for ( int x = 0; x &lt; x_dim; ++x ) 
         { 
             if ( matrix[ x * y_dim + y ] != 0 ) 
             { 
                 mask[ y ] = false; 
                 break; 
             } 
         } 
     } 

     matrix.erase( std::remove_if( matrix.begin(), 
                   matrix.end(), 
                   IS_MASKED( matrix, mask ) ), 
     matrix.end() ); 

     y_dim = matrix.size() / x_dim;     
 } 

 //das struct sieht so aus: 
 struct IS_MASKED 
 { 
     std::vector&lt; bool &gt; mask_; 
     const std::vector&lt; double &gt;* erase_el_; 

     IS_MASKED(const std::vector&lt; double &gt;&amp; erase_el, 
               const std::vector&lt; bool &gt;&amp; mask) : erase_el_( &amp;erase_el ), 
                                                  mask_( mask ) 
     { 
     } 

     bool operator()(const double&amp; f) const 
     { 
         return mask_[ ( &amp;f - &amp;*erase_el_-&gt;begin() ) % mask_.size() ]; 
     } 
 };
</code></pre>
<p>leider wie gesagt dauert das zu lange. Laut meinem callgraphen fressen die iteratoren die meiste Zeit weg - und das aus dieser obigen funktion. Das bedeutet doch aber dass nur das hier:</p>
<pre><code class="language-cpp">matrix.erase( std::remove_if( matrix.begin(), 
                   matrix.end(), 
                   IS_MASKED( matrix, mask ) ), 
     matrix.end() );
</code></pre>
<p>für das löschen verantworlich sein kann da nirgendwo sonst iteratoren in dieser funktion verwendet werden....</p>
<p>für änderungsvorschläge oder auch ideen wie man es besser realisieren könnte bin ich sehr dankbar!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1166610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1166610</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Wed, 01 Nov 2006 22:36:43 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren langsam? Vorteile? on Thu, 02 Nov 2006 16:05:29 GMT]]></title><description><![CDATA[<p>Was passiert denn, wenn Du einfach mal pointer verwendest, zumindest für den remove-teil? Also statt v.begin() ein &amp;*v.begin() und statt v.end() ein &amp;*v.begin()+v.size() Oder sowas. Achtung, funktioniert so natürlich nicht, wenn der vector leer ist. Das ist aber bei ner Matrix sowieso nicht sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167116</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Thu, 02 Nov 2006 16:05:29 GMT</pubDate></item></channel></rss>