<?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[Verständnisfrage zu Funktor]]></title><description><![CDATA[<p>Salve,<br />
ich verstehe offensichtlich die Funktionsweise eines Funktors nicht ganz. Um mein Problem zu verdeutlichen, habe ich ein kleines Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;sstream&gt;

using namespace std;

class FindIt
{
	public:
		FindIt(int _i) : i(_i), anz(0){}
		int getFound(){return anz;}

		bool operator()(const int &amp;cmp) {++anz; cout &lt;&lt; &quot;anz = &quot; &lt;&lt; anz &lt;&lt; endl; return i == cmp;}

	private:
		int i;
		int anz;
};

int main(int argc, char **argv)
{
	if(argc &lt; 2)
		return 1;

	stringstream ss;
	ss &lt;&lt; argv[1];

	int suchint;
	ss &gt;&gt; suchint;

	if(ss.fail())
		return 1;

	vector&lt;int&gt; ivec;

	ivec.push_back(10);
	ivec.push_back(12);
	ivec.push_back(8);

	vector&lt;int&gt;::iterator it;

	FindIt fi(suchint);
	it = find_if(ivec.begin(), ivec.end(), fi);

	cout &lt;&lt; &quot;Gefunden an &quot; &lt;&lt; fi.getFound() &lt;&lt; &quot;. &quot; &lt;&lt; &quot;Stelle\n&quot;;

}
</code></pre>
<p>Wenn man das Programm ausführt und als Parameter einen der Werte im Vektor mitgibt, sieht man, daß es entsprechend oft durch die operator() - Methode läuft und die Anzahl der Durchläufe mitgezählt wird.<br />
Nachdem das richtige Element gefunden wurde, kann ich die Anzahl der Durchläufe aber nicht mehr erkennen, anz steht wieder auf 0.<br />
In meiner Anwendung habe ich einen Vektor mit komplexen Elementen und will mit den Objekten, die die Suchbedingung nicht erfüllen, Berechnungen durchführen und danach das Ergebnis abholen, das aber funktioniert so natürlich nicht, wenn der Wert verloren geht.</p>
<p>Warum ist das so?<br />
Wenn ich anz in main definiere und dem Funktor nur eine Referenz darauf mitgebe, klappt das, aber das gefällt mir nicht so richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277536/verständnisfrage-zu-funktor</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 04:02:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277536.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Nov 2010 12:32:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisfrage zu Funktor on Sat, 20 Nov 2010 12:32:59 GMT]]></title><description><![CDATA[<p>Salve,<br />
ich verstehe offensichtlich die Funktionsweise eines Funktors nicht ganz. Um mein Problem zu verdeutlichen, habe ich ein kleines Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;sstream&gt;

using namespace std;

class FindIt
{
	public:
		FindIt(int _i) : i(_i), anz(0){}
		int getFound(){return anz;}

		bool operator()(const int &amp;cmp) {++anz; cout &lt;&lt; &quot;anz = &quot; &lt;&lt; anz &lt;&lt; endl; return i == cmp;}

	private:
		int i;
		int anz;
};

int main(int argc, char **argv)
{
	if(argc &lt; 2)
		return 1;

	stringstream ss;
	ss &lt;&lt; argv[1];

	int suchint;
	ss &gt;&gt; suchint;

	if(ss.fail())
		return 1;

	vector&lt;int&gt; ivec;

	ivec.push_back(10);
	ivec.push_back(12);
	ivec.push_back(8);

	vector&lt;int&gt;::iterator it;

	FindIt fi(suchint);
	it = find_if(ivec.begin(), ivec.end(), fi);

	cout &lt;&lt; &quot;Gefunden an &quot; &lt;&lt; fi.getFound() &lt;&lt; &quot;. &quot; &lt;&lt; &quot;Stelle\n&quot;;

}
</code></pre>
<p>Wenn man das Programm ausführt und als Parameter einen der Werte im Vektor mitgibt, sieht man, daß es entsprechend oft durch die operator() - Methode läuft und die Anzahl der Durchläufe mitgezählt wird.<br />
Nachdem das richtige Element gefunden wurde, kann ich die Anzahl der Durchläufe aber nicht mehr erkennen, anz steht wieder auf 0.<br />
In meiner Anwendung habe ich einen Vektor mit komplexen Elementen und will mit den Objekten, die die Suchbedingung nicht erfüllen, Berechnungen durchführen und danach das Ergebnis abholen, das aber funktioniert so natürlich nicht, wenn der Wert verloren geht.</p>
<p>Warum ist das so?<br />
Wenn ich anz in main definiere und dem Funktor nur eine Referenz darauf mitgebe, klappt das, aber das gefällt mir nicht so richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983199</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sat, 20 Nov 2010 12:32:59 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zu Funktor on Sat, 20 Nov 2010 12:55:07 GMT]]></title><description><![CDATA[<p>std::find übernimmt den Funktor per Value. D.h. dein Funktor wird in std::find_if &quot;kopiert&quot;. Dann wird die Kopie geändert und dein Original bleibt erhalten.</p>
<p>Abhilfte kannst du zB so schaffen:</p>
<pre><code class="language-cpp">Functor f;
std::find_if(.. , .. , boost::ref(f));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1983205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983205</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Sat, 20 Nov 2010 12:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zu Funktor on Sat, 20 Nov 2010 14:56:15 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>In meiner Anwendung habe ich einen Vektor mit komplexen Elementen und will mit den Objekten, die die Suchbedingung nicht erfüllen, Berechnungen durchführen und danach das Ergebnis abholen, das aber funktioniert so natürlich nicht, wenn der Wert verloren geht.</p>
</blockquote>
<p>Eventuell wird's aber auch weniger und verständlicherer Code, wenn du das in eine ordinäre Schleife packst.</p>
<p>Für dein Beispiel mit dem Bestimmen der Anzahl würde ich <a href="http://cplusplus.com/reference/algorithm/count_if/%5Dcount_if" rel="nofollow">http://cplusplus.com/reference/algorithm/count_if/]count_if</a> nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983245</guid><dc:creator><![CDATA[dfgdfgdfg]]></dc:creator><pubDate>Sat, 20 Nov 2010 14:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zu Funktor on Sat, 20 Nov 2010 15:05:12 GMT]]></title><description><![CDATA[<p>Naja, in meiner Anwendung muß ich eine Liste splitten. Via find_if finde ich die richtige Position. Ich muß dann aus der neu zu bildenden Liste eine Summe aus den Membern ermitteln. Da dachte ich, es bietet sich an, daß gleich im Funktor erledigen zu lassen.<br />
Im Moment mache ich das halt so, daß ich dem Funktor eine Referenz übergebe, in die ich dann summieren lasse. Das funktioniert erst mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983251</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sat, 20 Nov 2010 15:05:12 GMT</pubDate></item></channel></rss>