<?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[Funktor für aufsummieren]]></title><description><![CDATA[<p>Gegeben eine Klasse T mit einer Funktion double sum() und einen vector&lt;T&gt;, wie kann ich in einer Zeile (mit Funktoren) die Bedingung &quot;Sind für alle V aus dem vector&lt;T&gt; die sum() größer als N&quot; formulieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265194/funktor-für-aufsummieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 18:48:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265194.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Apr 2010 11:48:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 11:48:21 GMT]]></title><description><![CDATA[<p>Gegeben eine Klasse T mit einer Funktion double sum() und einen vector&lt;T&gt;, wie kann ich in einer Zeile (mit Funktoren) die Bedingung &quot;Sind für alle V aus dem vector&lt;T&gt; die sum() größer als N&quot; formulieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885030</guid><dc:creator><![CDATA[dsfdfsdf]]></dc:creator><pubDate>Mon, 19 Apr 2010 11:48:21 GMT</pubDate></item><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 11:53:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">double tmp;
if (accumulate( meinVec.begin(), meinVec.end(), tmp, sum() ) &gt; N) ...
</code></pre>
<p>/edit pumuckl: aus [c++] [cpp]-Tags gemacht <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/1885031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885031</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 19 Apr 2010 11:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 11:52:54 GMT]]></title><description><![CDATA[<p>Wofür brauchst du da einen Funktor?</p>
<pre><code class="language-cpp">if (std::accumulate(dein_vector.begin(),dein_vector.end(), zaehler, sum) &gt; N)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1885032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885032</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Apr 2010 11:52:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 11:56:44 GMT]]></title><description><![CDATA[<p>Wenn sum() memberfunktion von T ist, geht es dann so?</p>
<pre><code class="language-cpp">double tmp;
	while (accumulate(Eckpunkte.begin(), Eckpunkte.end(), tmp, &amp;point::sum) &gt; N)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1885037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885037</guid><dc:creator><![CDATA[dsfgdfg]]></dc:creator><pubDate>Mon, 19 Apr 2010 11:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 12:12:48 GMT]]></title><description><![CDATA[<p>dsfgdfg schrieb:</p>
<blockquote>
<p>Wenn sum() memberfunktion von T ist, geht es dann so?</p>
<pre><code class="language-cpp">double tmp;
	while (accumulate(Eckpunkte.begin(), Eckpunkte.end(), tmp, &amp;point::sum) &gt; N)
</code></pre>
</blockquote>
<p>Nein, Pointer auf (nichtstatische) Memberfunktionen funktionieren anders. Erlaube mir jedoch die Gegenfrage: Wie sieht die genaue Deklaration von sum() aus? Fellhuhn und ich sind nämlich davon ausgegangen, dass es sich um eine Funktion handelt, die zwei Argumente annimmt und die Summe zurückggibt. Wenn dies nicht der Fall ist, musst du sum() irgendwie so hinbiegen, dass es zwei Argumente nimmt und die Summe zurückgibt, beispielsweise indem du eine weitere Funktion schreibst, die sum auf die richtige Weise aufruft.</p>
<p>edit: Oder du schreibst gleich dein eigenes Äquivalent zu accumulate, dass sum() richtig benutzt. Damit entfernst du sich aber immer weiter von deinem Plan, Funktoren zu benutzen. Du könntest jedoch auch einen Funktor schreiben, der eine Sume berechnet und dann std::for_each mit diesem Funktor aufrufen. Ist es das, was du ursprünglich machen wolltest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885046</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Apr 2010 12:12:48 GMT</pubDate></item><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 12:15:54 GMT]]></title><description><![CDATA[<p>Ich verstehe deinen Satz nicht ganz: Soll fuer jedes Element in vector&lt;T&gt; geprueft werden, ob T.sum() &gt; N ist? Das laesst sich wohl eher mit einer for-Schleife realisieren, da beim ersten Fehlschlag abgebrochen werden kann und nicht alle Elemente ueberprueft werden muessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885048</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 19 Apr 2010 12:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 12:32:34 GMT]]></title><description><![CDATA[<p>Ich glaube er meint die Summe aller point::sum() Returnwerte. Also so:</p>
<pre><code class="language-cpp">struct AddiereSum
{
    double operator()( double sum, const point&amp; next_point ) const
    {
        return sum + next_point.sum();
    }
};

int main()
{
    using namespace std;
    vector&lt; point &gt; Eckpunkte;
    const double N = 13.0;
    if( accumulate( Eckpunkte.begin(), Eckpunkte.end(), double(0), AddiereSum() ) &gt; N )
    {
        // die Summe aller point::sum()s in 'Eckpunkte' ist größer als N
    }
</code></pre>
<p>..oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885053</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Mon, 19 Apr 2010 12:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 13:45:01 GMT]]></title><description><![CDATA[<p>Ich interpretiere es so, dass es quasi folgendes sein soll:</p>
<pre><code class="language-cpp">if (vec[0].sum() &gt; N &amp;&amp; vec[1].sum() &gt; N &amp;&amp; .... )
</code></pre>
<p>Das wäre dann in &quot;kurz&quot;:</p>
<pre><code class="language-cpp">template &lt;class Comparator&gt;
struct CompareSumTo_t
{
  CompareSumTo_t(Comparator const&amp; c = Comparator()) : comp(c) {}
  bool operator()(T const&amp; arg) { return comp(arg.sum()); }
private:
  Comparator comp;
};

template &lt;class T&gt;
CompareSumTo_t&lt;T&gt; compareSumTo(T const&amp; t)
{
  return CompareSumTo_t&lt;T&gt;(t);
}

if (vec.end() == std::find_if(vec.begin(), vec.end(), compareSumTo(std::bind2nd(std::less&lt;int&gt;(),N)) )
</code></pre>
<p>Da lässt sich sicherlich auch was hässlicheres mit boost::bind / boost::lambda bauen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885110</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 19 Apr 2010 13:45:01 GMT</pubDate></item><item><title><![CDATA[Reply to Funktor für aufsummieren on Mon, 19 Apr 2010 15:10:36 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich interpretiere es so, dass es quasi folgendes sein soll:</p>
<pre><code class="language-cpp">if (vec[0].sum() &gt; N &amp;&amp; vec[1].sum() &gt; N &amp;&amp; .... )
</code></pre>
</blockquote>
<p>So verstehe ich die Frage auch.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Da lässt sich sicherlich auch was hässlicheres mit boost::bind / boost::lambda bauen...</p>
</blockquote>
<p>Och, so hässlich ist das gar nicht:</p>
<pre><code class="language-cpp">bool antwort = vec.end() == find_if( vec.begin(), vec.end(), 
  bind(less_equal&lt;double&gt;(),bind(&amp;T::sum,_1),N) );
</code></pre>
<p>(ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885168</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 19 Apr 2010 15:10:36 GMT</pubDate></item></channel></rss>