<?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[Boost PTR Container und Algorithmen]]></title><description><![CDATA[<p>Hallihallo</p>
<p>Im Artikel <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-146604.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-146604.html</a> steht das die Algorithmen das Arbeitspferd der STL sind.</p>
<p>Nun bin ich am überlegen ob es Sinn macht wenn ich z.B. einen Boost PTR Vector habe und ich das Objekt des Containers haben möchte welches in einer Membervariable einen bestimmten Wert hat(z.b. ID-String o.ä. - d.h. der String ist in der Liste der Objekte einzigartig). Lohnt es sich da nen Algorithmus draufzuschicken oder ist das too much und sollte man lieber einfach iterieren und per hand überprüfen?</p>
<p>Vorallem dürfte doch ein einfaches iterieren über die Elemente mit einem entsprechendem return bei einem Fund schneller sein als mit einem Algorithmus komplett drüber zu gehen und bei einem Fund trotzdem weiter zu suchen, oder irre ich mich da?</p>
<p>[habe bisher noch nicht mit Algorithmen über Containern gearbeitet]</p>
<p>Danke im voraus für die Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223681/boost-ptr-container-und-algorithmen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 14:25:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223681.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Sep 2008 14:50:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Mon, 29 Sep 2008 14:50:50 GMT]]></title><description><![CDATA[<p>Hallihallo</p>
<p>Im Artikel <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-146604.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-146604.html</a> steht das die Algorithmen das Arbeitspferd der STL sind.</p>
<p>Nun bin ich am überlegen ob es Sinn macht wenn ich z.B. einen Boost PTR Vector habe und ich das Objekt des Containers haben möchte welches in einer Membervariable einen bestimmten Wert hat(z.b. ID-String o.ä. - d.h. der String ist in der Liste der Objekte einzigartig). Lohnt es sich da nen Algorithmus draufzuschicken oder ist das too much und sollte man lieber einfach iterieren und per hand überprüfen?</p>
<p>Vorallem dürfte doch ein einfaches iterieren über die Elemente mit einem entsprechendem return bei einem Fund schneller sein als mit einem Algorithmus komplett drüber zu gehen und bei einem Fund trotzdem weiter zu suchen, oder irre ich mich da?</p>
<p>[habe bisher noch nicht mit Algorithmen über Containern gearbeitet]</p>
<p>Danke im voraus für die Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590314</guid><dc:creator><![CDATA[FunMaker]]></dc:creator><pubDate>Mon, 29 Sep 2008 14:50:50 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Mon, 29 Sep 2008 15:35:38 GMT]]></title><description><![CDATA[<p>Die Standard Algorithmen machen solche (lächerlichen) Optimierungen bereits. Für so einen einfachen Such-Algorithmus wirst du mit &quot;Selber-Drüber-Iterieren&quot; nie besser sein als der Standard Algorithmus. Nur in speziellen Fällen, in denen du dir sicher bist, dass erstens die Stelle tatsächlich Optimierunsbedarf hat (Profiler, ist die Stelle überhaupt kritisch?) und zweitens du tatsächlich in der Lage bist schnelleren Code zu schreiben.</p>
<p>In deinem Fall könnte ein <a href="http://www.cplusplus.com/reference/algorithm/find_if.html" rel="nofollow">find_if</a> passend.</p>
<p>Ein Standard Algorithmus ist nie &quot;too much&quot;, meistens sogar die etwas faulere Variante (im Sinne von weniger tippen). Außerdem kannst du dir sicher sein, dass du zumindest in dem Code keinen Fehler gemacht hast, da er ja nicht von dir stammt <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>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590355</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Mon, 29 Sep 2008 15:35:38 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Mon, 29 Sep 2008 16:49:16 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>Ein Standard Algorithmus ist nie &quot;too much&quot;, meistens sogar die etwas faulere Variante (im Sinne von weniger tippen).</p>
</blockquote>
<p>Außerdem erhöht es die Lesbarkeit des Codes. Ein <code>find_if</code> ist viel aussagekräftiger, als irgendeine <code>for</code> -Schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1590415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1590415</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 29 Sep 2008 16:49:16 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Wed, 01 Oct 2008 23:07:29 GMT]]></title><description><![CDATA[<p>Okay danke für die Tipps.<br />
Jetzt fällt mir natürlich bei find_if auf das die Prädikats-Funktion nur einen Parameter übernimmt (das entsprechende Element aus dem Container jeweils). Im Internet gibt es viele Beispiele wo find_if auf einen Konstanten Wert überprüft, nun ist es bei mir aber so das ich auf einen Variablen Wert überprüfen möchte - ist es irgendwie möglich einen 2. Parameter einzuführen?</p>
<p>(ich habe gesehen das es in einigen Beispielen [z.b. <a href="http://www.willemer.de/informatik/cpp/stl.htm" rel="nofollow">http://www.willemer.de/informatik/cpp/stl.htm</a> bei Funktionsobjekten] nicht mit einer Einfachen Funktion sondern mit einer Klasse gearbeitet wurde - klinkt logisch aber da geht die Übersichtlichkeit des find_if doch sehr verloren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591782</guid><dc:creator><![CDATA[FunMaker]]></dc:creator><pubDate>Wed, 01 Oct 2008 23:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 01:08:36 GMT]]></title><description><![CDATA[<p>FunMaker schrieb:</p>
<blockquote>
<p>(ich habe gesehen das es in einigen Beispielen [z.b. <a href="http://www.willemer.de/informatik/cpp/stl.htm" rel="nofollow">http://www.willemer.de/informatik/cpp/stl.htm</a> bei Funktionsobjekten] nicht mit einer Einfachen Funktion sondern mit einer Klasse gearbeitet wurde - klinkt logisch aber da geht die Übersichtlichkeit des find_if doch sehr verloren)</p>
</blockquote>
<p>Ja, Funktionsobjekte schmälern die Übersichtlichkeit leider manchmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Ich lasse das in solchen Fällen meinen Bauch entscheiden..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591801</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 02 Oct 2008 01:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 02:59:56 GMT]]></title><description><![CDATA[<blockquote>
<p>nicht mit einer Einfachen Funktion sondern mit einer Klasse gearbeitet wurde - klinkt logisch aber da geht die Übersichtlichkeit des find_if doch sehr verloren</p>
</blockquote>
<p>In wiefern sind den da Funktionen besser?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591808</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 02 Oct 2008 02:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 05:26:50 GMT]]></title><description><![CDATA[<p>FunMaker schrieb:</p>
<blockquote>
<p>Jetzt fällt mir natürlich bei find_if auf das die Prädikats-Funktion nur einen Parameter übernimmt (das entsprechende Element aus dem Container jeweils). Im Internet gibt es viele Beispiele wo find_if auf einen Konstanten Wert überprüft, nun ist es bei mir aber so das ich auf einen Variablen Wert überprüfen möchte - ist es irgendwie möglich einen 2. Parameter einzuführen?</p>
</blockquote>
<p>Was für einen variablen Wert willst du denn prüfen? Prädikate sollten allgemein stateless sein, soll heißen das Funktionsobjekt darf z.B. nicht mitzählen wie oft es den Vergleich schon angestellt hat o.ä.<br />
Was aber geht sind Parameter die du den Prädikaten mitgibst und die sich nicht ändern, z.B.:</p>
<pre><code class="language-cpp">int main()
{
   std::vector&lt;Point3D&gt; p3dVec;
   FillP3dVec();

   //Prädikat:
   struct CompareXCoords
   { 
      CompareXCoords(double compareTo) : value(compareTo) {}
      bool operator()(Point3D const&amp; p3d) { return value == p3d.getX();}
   private:
      double value;
   };

   Point3D&amp; xIs0 = *( std::find_if(p3dVec.begin(), p3dVec.end(),CompareXCoords(0.0)) );
   Point3D&amp; xIs6 = *( std::find_if(p3dVec.begin(), p3dVec.end(),CompareXCoords(6.0)) );
}
</code></pre>
<p>Ich find das mit den Funktionsobjekten übrigens meist weniger unübersichtlich als mit Funktionen: Funktionen müssen immer &quot;irgendwo anders&quot; definiert werden, auf jeden Fall außerhalb der Funktion in der ich sie dann an den Algorithmus übergebe. Funktoren hingegen kann ich unmittelbar vor der Benutzung definieren, als local class (vermutlich ein weniger bekanntes Feature in C++).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591826</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 02 Oct 2008 05:26:50 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 08:06:47 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Funktoren hingegen kann ich unmittelbar vor der Benutzung definieren, als local class (vermutlich ein weniger bekanntes Feature in C++).</p>
</blockquote>
<p>Vermutlich deshalb wenig bekannt weil man es eben nicht machen darf <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/1591902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591902</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 02 Oct 2008 08:06:47 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 10:21:51 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich find das mit den Funktionsobjekten übrigens meist weniger unübersichtlich als mit Funktionen: Funktionen müssen immer &quot;irgendwo anders&quot; definiert werden, auf jeden Fall außerhalb der Funktion in der ich sie dann an den Algorithmus übergebe.</p>
</blockquote>
<p>Übersichtlicher als Funktionen sind Funktionsobjekte meistens schon, aber die Frage ist hier ja, ob &quot;inline-Code&quot; nicht lesbarer/sinnvoller wäre.</p>
<p>So wie ich das verstanden habe, geht's hier um</p>
<pre><code class="language-cpp">//Prädikat; edit: auf Wunsch von Lord Jaxom ausgelagert :)
struct CompareXCoords
{ 
   CompareXCoords(double compareTo) : value(compareTo) {}
   bool operator()(Point3D const&amp; p3d) { return value == p3d.getX();}
private:
   double value;
};

Point3D foo()
{
    ...

   Point3D&amp; xIs0 = *( std::find_if(p3dVec.begin(), p3dVec.end(),CompareXCoords(0.0)) );
   return xIs0;
}
</code></pre>
<p>versus</p>
<pre><code class="language-cpp">Point3D foo()
{
    ...

    // Bla-Element finden und zurückgeben
    BOOST_FOREACH( const Point3D&amp; p, p3dVec )
        if ( p.getX() == 0.0 )
            return p;
}
</code></pre>
<p>, wo ich persönlich wahrscheinlich die zweite Variante wählen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591968</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 02 Oct 2008 10:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 09:41:54 GMT]]></title><description><![CDATA[<p>Es sei nochmal darauf hingewiesen, dass erstere Variante überhaupt nicht zulässig ist <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/1591982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591982</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 02 Oct 2008 09:41:54 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 09:47:34 GMT]]></title><description><![CDATA[<p>aber ein</p>
<p>for_each(v.begin(), v.end(), cout&lt;&lt;_1&lt;&lt;endl)<br />
wäre zB ganz niedlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1591984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1591984</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 02 Oct 2008 09:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 10:25:55 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Es sei nochmal darauf hingewiesen, dass erstere Variante überhaupt nicht zulässig ist <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>
</blockquote>
<p>Ist das dann eine MSVC-Erweiterung (mit dem geht's jedenfalls)? Und weil ich ihn grad nicht zur Hand hab: Weiß jemand, wie's mit dem GCC aussieht?</p>
<p>PS: Danke Lord, Shade's Post hatte ich ganz übersehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1592003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592003</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 02 Oct 2008 10:25:55 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 10:31:44 GMT]]></title><description><![CDATA[<p>Wie Shade bereits angedeutet hat, gibt es ja noch die dritte Variante mit Boost.Lambda.</p>
<pre><code class="language-cpp">Point3D foo()
{
    ...

   Point3D&amp; xIs0 = *( std::find_if(p3dVec.begin(), p3dVec.end(), _1 == 0.0) );
   return xIs0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1592007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592007</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Thu, 02 Oct 2008 10:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 10:44:03 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Ist das dann eine MSVC-Erweiterung (mit dem geht's jedenfalls)? Und weil ich ihn grad nicht zur Hand hab: Weiß jemand, wie's mit dem GCC aussieht?</p>
</blockquote>
<p>Laut <a href="http://www.informit.com/articles/article.aspx?p=345948&amp;seqNum=3" rel="nofollow">http://www.informit.com/articles/article.aspx?p=345948&amp;seqNum=3</a> lassen CodeWarrior, DigitalMars, Watcom, Borland und Microsoft das zu. GCC (4.1 und 4.4 getestet) meldet einen Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1592016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592016</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 02 Oct 2008 10:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to Boost PTR Container und Algorithmen on Thu, 02 Oct 2008 13:50:19 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>Wie Shade bereits angedeutet hat, gibt es ja noch die dritte Variante mit Boost.Lambda.</p>
</blockquote>
<p>Richtig, Lambda vergesse ich immer. Das finde ich auch mit Abstand die beste Lösung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>Laut <a href="http://www.informit.com/articles/article.aspx?p=345948&amp;seqNum=3" rel="nofollow">http://www.informit.com/articles/article.aspx?p=345948&amp;seqNum=3</a> lassen CodeWarrior, DigitalMars, Watcom, Borland und Microsoft das zu. GCC (4.1 und 4.4 getestet) meldet einen Fehler.</p>
</blockquote>
<p>Schade.. Ich entwickle meistens mit dem MSVC oder GCC, Inkompatibilität ist schon was feines <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=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1592198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1592198</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 02 Oct 2008 13:50:19 GMT</pubDate></item></channel></rss>