<?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: lambda &amp;lt;-&amp;gt; phoenix [gelöst]]]></title><description><![CDATA[<p>Was sind die grundlegenden Unterschiede zwischen boost::lambda und boost::phoenix?</p>
<p>Ich hab hier ein Beispiel geschrieben, das alle ungeraden Zahlen eines Vektors in einen neuen Vektor schreibt und ausgibt, und zwar einmal mit lambda und einmal mit phoenix, und beides sieht ziemlich gleich aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

#include &lt;boost/lambda/lambda.hpp&gt;
#include &lt;boost/lambda/if.hpp&gt;
#include &lt;boost/lambda/bind.hpp&gt;

#include &lt;boost/spirit/include/phoenix.hpp&gt;

int main()
{
    std::vector&lt;int&gt; container;
    for(size_t i = 0; i &lt; 10; ++i)
    {
        container.push_back(rand() % 100);
    }
    {//lamba:
        namespace lambda = boost::lambda;
        std::vector&lt;int&gt; oddValues;
        std::for_each(container.begin(), container.end(),
            lambda::if_(lambda::_1 % 2 != 0) [lambda::bind(&amp;std::vector&lt;int&gt;::push_back, &amp;oddValues, lambda::_1)]);
        std::for_each(oddValues.begin(), oddValues.end(), std::cout &lt;&lt; lambda::_1 &lt;&lt; ' ');
        std::cout &lt;&lt; std::endl;
    }
    {//phoenix:
        namespace phoenix = boost::phoenix;
        std::vector&lt;int&gt; oddValues;
        std::for_each(container.begin(), container.end(),
            phoenix::if_(phoenix::arg_names::_1 % 2 != 0) [phoenix::push_back(phoenix::ref(oddValues), phoenix::arg_names::_1)]);
        std::for_each(oddValues.begin(), oddValues.end(), std::cout &lt;&lt; phoenix::arg_names::_1 &lt;&lt; ' ');
        std::cout &lt;&lt; std::endl;
    }
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/258172/boost-lambda-lt-gt-phoenix-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 12:06:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258172.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Jan 2010 13:06:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost: lambda &amp;lt;-&amp;gt; phoenix [gelöst] on Thu, 07 Jan 2010 21:42:55 GMT]]></title><description><![CDATA[<p>Was sind die grundlegenden Unterschiede zwischen boost::lambda und boost::phoenix?</p>
<p>Ich hab hier ein Beispiel geschrieben, das alle ungeraden Zahlen eines Vektors in einen neuen Vektor schreibt und ausgibt, und zwar einmal mit lambda und einmal mit phoenix, und beides sieht ziemlich gleich aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

#include &lt;boost/lambda/lambda.hpp&gt;
#include &lt;boost/lambda/if.hpp&gt;
#include &lt;boost/lambda/bind.hpp&gt;

#include &lt;boost/spirit/include/phoenix.hpp&gt;

int main()
{
    std::vector&lt;int&gt; container;
    for(size_t i = 0; i &lt; 10; ++i)
    {
        container.push_back(rand() % 100);
    }
    {//lamba:
        namespace lambda = boost::lambda;
        std::vector&lt;int&gt; oddValues;
        std::for_each(container.begin(), container.end(),
            lambda::if_(lambda::_1 % 2 != 0) [lambda::bind(&amp;std::vector&lt;int&gt;::push_back, &amp;oddValues, lambda::_1)]);
        std::for_each(oddValues.begin(), oddValues.end(), std::cout &lt;&lt; lambda::_1 &lt;&lt; ' ');
        std::cout &lt;&lt; std::endl;
    }
    {//phoenix:
        namespace phoenix = boost::phoenix;
        std::vector&lt;int&gt; oddValues;
        std::for_each(container.begin(), container.end(),
            phoenix::if_(phoenix::arg_names::_1 % 2 != 0) [phoenix::push_back(phoenix::ref(oddValues), phoenix::arg_names::_1)]);
        std::for_each(oddValues.begin(), oddValues.end(), std::cout &lt;&lt; phoenix::arg_names::_1 &lt;&lt; ' ');
        std::cout &lt;&lt; std::endl;
    }
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1834329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1834329</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Thu, 07 Jan 2010 21:42:55 GMT</pubDate></item><item><title><![CDATA[Reply to boost: lambda &amp;lt;-&amp;gt; phoenix [gelöst] on Thu, 07 Jan 2010 21:42:02 GMT]]></title><description><![CDATA[<p>Es gibt anscheinend tatsächlich keinen Unterschied, daher sollen die beiden Bibliotheken wohl auch zusammengelegt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1834708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1834708</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Thu, 07 Jan 2010 21:42:02 GMT</pubDate></item><item><title><![CDATA[Reply to boost: lambda &amp;lt;-&amp;gt; phoenix [gelöst] on Thu, 07 Jan 2010 22:13:16 GMT]]></title><description><![CDATA[<p>Mit C++0x ergibt sich das dann eh.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

int main() {
	std::vector&lt;int&gt; container(10);
    for(size_t i = 0; i &lt; 10; ++i) {
        container[i] = i;
    }
	std::vector&lt;int&gt; vec;
	std::for_each(container.begin(), container.end(), [&amp;](int e) {
		if(e % 2 != 0)
			vec.push_back(e);
	});
	std::for_each(vec.begin(), vec.end(), [](int e) {
		std::cout &lt;&lt; e &lt;&lt; ' ';
	});
	std::cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1834731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1834731</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Thu, 07 Jan 2010 22:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to boost: lambda &amp;lt;-&amp;gt; phoenix [gelöst] on Thu, 07 Jan 2010 22:20:25 GMT]]></title><description><![CDATA[<p>Wobei man hier geradeso gut die Foreach-Schleife verwenden könnte. <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/1834735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1834735</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 07 Jan 2010 22:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to boost: lambda &amp;lt;-&amp;gt; phoenix [gelöst] on Thu, 07 Jan 2010 22:26:44 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wobei man hier geradeso gut die Foreach-Schleife verwenden könnte. <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>
<p>Meinst du das hier:<br />
<a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Range-based_for-loop" rel="nofollow">http://en.wikipedia.org/wiki/C%2B%2B0x#Range-based_for-loop</a><br />
?</p>
<p>Das finde ich sehr nett. <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/1834739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1834739</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 07 Jan 2010 22:26:44 GMT</pubDate></item><item><title><![CDATA[Reply to boost: lambda &amp;lt;-&amp;gt; phoenix [gelöst] on Thu, 07 Jan 2010 22:30:00 GMT]]></title><description><![CDATA[<p>Ja, genau das meinte ich. Wofür man heutzutage eben noch <code>BOOST_FOREACH</code> braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1834743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1834743</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 07 Jan 2010 22:30:00 GMT</pubDate></item></channel></rss>