<?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[Probleme mit for_each]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist es in C++ nicht möglich einer Funktion die mit for_each aufgerufen wird, Parameter zu übergeben?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;deque&gt;
#include &lt;algorithm&gt;

void tauschen ( std::deque&lt;int&gt; &amp;d1, std::deque&lt;int&gt; &amp;d2 ){
	std::iter_swap ( d1.begin(), d2.begin() );
}

int main ( int argc, char *argv[] ){
    std::deque&lt;int&gt; deq1;
    std::deque&lt;int&gt; deq2;

    deq1.push_back ( 1 );
    deq1.push_back ( 2 );
    deq1.push_back ( 3 );

    deq2.push_back ( 4 );
    deq2.push_back ( 5 );
    deq2.push_back ( 6 );

    std::for_each ( deq1.begin(), deq1.end(), tauschen ( deq1, deq2 ) ); // Hier ist der Fehler
}
</code></pre>
<p>Fehlermeldung:<br />
1&gt;.\Main.cpp(219) : error C2784: &quot;_Fn1 std::for_each(_InIt,_InIt,_Fn1)&quot;: template-Argument für &quot;_Fn1&quot; konnte nicht von &quot;void&quot; hergeleitet werden.<br />
1&gt; C:\Programme\Microsoft Visual Studio 8\VC\include\algorithm(22): Siehe Deklaration von 'std::for_each'</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/232877/probleme-mit-for_each</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 04:33:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232877.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Jan 2009 12:11:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 12:11:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ist es in C++ nicht möglich einer Funktion die mit for_each aufgerufen wird, Parameter zu übergeben?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;deque&gt;
#include &lt;algorithm&gt;

void tauschen ( std::deque&lt;int&gt; &amp;d1, std::deque&lt;int&gt; &amp;d2 ){
	std::iter_swap ( d1.begin(), d2.begin() );
}

int main ( int argc, char *argv[] ){
    std::deque&lt;int&gt; deq1;
    std::deque&lt;int&gt; deq2;

    deq1.push_back ( 1 );
    deq1.push_back ( 2 );
    deq1.push_back ( 3 );

    deq2.push_back ( 4 );
    deq2.push_back ( 5 );
    deq2.push_back ( 6 );

    std::for_each ( deq1.begin(), deq1.end(), tauschen ( deq1, deq2 ) ); // Hier ist der Fehler
}
</code></pre>
<p>Fehlermeldung:<br />
1&gt;.\Main.cpp(219) : error C2784: &quot;_Fn1 std::for_each(_InIt,_InIt,_Fn1)&quot;: template-Argument für &quot;_Fn1&quot; konnte nicht von &quot;void&quot; hergeleitet werden.<br />
1&gt; C:\Programme\Microsoft Visual Studio 8\VC\include\algorithm(22): Siehe Deklaration von 'std::for_each'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653789</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Wed, 28 Jan 2009 12:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 12:17:28 GMT]]></title><description><![CDATA[<p>Afaik nein:<br />
<a href="http://www.cppreference.com/wiki/stl/algorithm/for_each" rel="nofollow">http://www.cppreference.com/wiki/stl/algorithm/for_each</a><br />
Lös das doch einfach über eine for.. schleife.<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653792</guid><dc:creator><![CDATA[scorcher24@arybte]]></dc:creator><pubDate>Wed, 28 Jan 2009 12:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 12:20:53 GMT]]></title><description><![CDATA[<p>scorcher24@arybte schrieb:</p>
<blockquote>
<p>Lös das doch einfach über eine for.. schleife.</p>
</blockquote>
<p>Mit einer for Schleife hatte ich es ursprünglich gelöst. Ich dachte nur vielleicht funktioniert es auch mit for_each.</p>
<p>Trotzdem danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653795</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Wed, 28 Jan 2009 12:20:53 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 12:29:12 GMT]]></title><description><![CDATA[<p>Sicher geht das. Man nehme einfach einen functor.<br />
aber du willst hier kein for_each du willst ein swap_ranges</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653800</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 28 Jan 2009 12:29:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 12:49:33 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>aber du willst hier kein for_each du willst ein swap_ranges</p>
</blockquote>
<p>Nein ich will hier schon for_each <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="😉"
    /><br />
Mir ging es hier nicht um das tauschen der Werte sondern darum, ob man es so aufrufen kann. Das mit dem tauschen war nur ein Beispiel.<br />
Aber danke, ich werde mir mal ansehen, wie man das mit einem functor macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653813</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Wed, 28 Jan 2009 12:49:33 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 13:38:40 GMT]]></title><description><![CDATA[<p>Eigentlich ist ja <strong>for_each</strong> (wie der Name sagt) <strong>für jedes</strong> Element (von deq1.begin bis deq1.end) gedacht. Das machst du aber nicht, und somit missbrauchst du for_each.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653841</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Wed, 28 Jan 2009 13:38:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 15:01:34 GMT]]></title><description><![CDATA[<p>Bulli schrieb:</p>
<blockquote>
<p>Eigentlich ist ja <strong>for_each</strong> (wie der Name sagt) <strong>für jedes</strong> Element (von deq1.begin bis deq1.end) gedacht. Das machst du aber nicht, und somit missbrauchst du for_each.</p>
</blockquote>
<p>Also nochmal. Das mit dem tauschen der Werte war nur ein Beispiel. Dass das nicht viel Sinn ergibt ist mir schon klar.<br />
Ich wollte einfach nur wissen, ob sowas möglich ist.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

void add ( std::vector&lt;int&gt; &amp;val ){
	val++;
}

int main(){
	std::vector&lt;int&gt; Irgendwas;

	Irgendwas.push_back ( 1 );
	Irgendwas.push_back ( 4 );
	Irgendwas.push_back ( 8 );
	Irgendwas.push_back ( 2 );

	int Add = 2;

	std::for_each ( Irgendwas.begin(), Irgendwas.end(), add ( Add ) ); // &lt;-- Hier bei for_each der Funktion &quot;add&quot; einen Parameter zu übergeben

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1653893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653893</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Wed, 28 Jan 2009 15:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 15:05:47 GMT]]></title><description><![CDATA[<p>Deine Funktion passt nicht, zusätzliche Parameter hin oder her. Der Parameter darf kein vector sein, sondern nur int.</p>
<p>Was willst du mit dem Code denn erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653899</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 28 Jan 2009 15:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 15:06:52 GMT]]></title><description><![CDATA[<p>Im Prinzip kann man Funktoren als &quot;Funktionen mit Status&quot; ansehen, in der Praxis sind sie einfach ein Objekt, auf dem man &quot;operator()&quot; aufrufen kann. Näheres <a href="http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Standard_Template_Library#Funktionsobjekte" rel="nofollow">hier</a> <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/1653901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653901</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 28 Jan 2009 15:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 15:11:17 GMT]]></title><description><![CDATA[<p>Äh sorry, eigentlich wollte ich nur das hier schreiben</p>
<pre><code class="language-cpp">std::for_each ( Irgendwas.begin(), Irgendwas.end(), add ( Add ) ); // &lt;-- Hier bei for_each der Funktion &quot;add&quot; einen Parameter zu übergeben
</code></pre>
<p>Der Rest des Programms gehört nicht dazu.<br />
Ich will damit gar nichts erreichen. Ich habe bis jetzt nur gesehen, dass bei for_each kein Parameter übergeben wird. Und deshalb habe ich mich gefragt ob es möglich ist einen zu übergeben. War reines Interesse ob es möglich ist oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653905</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Wed, 28 Jan 2009 15:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 15:16:17 GMT]]></title><description><![CDATA[<p>möchtest Du sowas?</p>
<pre><code class="language-cpp">void add ( int &amp; val ){
  val += 2;
}

int main(){
...
	std::for_each ( Irgendwas.begin(), Irgendwas.end(), add ); 
...
}
</code></pre>
<p>soweit ich weiß, kannst Du keinen Parameter übergeben.<br />
Allerdings könnte man tricksen mit</p>
<pre><code class="language-cpp">template &lt;int i&gt;
void add ( int &amp; val ){
  val += i;
}

int main(){
...
	std::for_each ( Irgendwas.begin(), Irgendwas.end(), add&lt;2&gt; );
}
</code></pre>
<p>geht aber natürlich nur mit &quot;passenden Typen&quot;.</p>
<p>Oder Du nimmst ein Funktor, den Du initialisierst:</p>
<pre><code class="language-cpp">struct add {
   int const i;
   add(int i) : i(i) {}
   add(add const&amp;  a) : i(a.i) {}
   void operator()(int&amp; v) { v += i; }
};

int main(){
...
   add a(5);
   std::for_each ( Irgendwas.begin(), Irgendwas.end(), a );
}
</code></pre>
<p>Da kannst Du dann auch beliebige Typen reinpacken.<br />
Allerdings habe ich hier mal gelesen, dass der Funktor zwischen den Aufrufen keinen &quot;Status halten&quot; darf - der Compiler macht das zwar üblicherweise mit, aber es kann zu unerwarteten ergebnissen kommen...</p>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Ich freu mich schon auf Lambda-Funktionen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653906</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 28 Jan 2009 15:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 15:27:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int const i;
</code></pre>
<p>Unschön. Du verbietest damit den op=</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653919</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 28 Jan 2009 15:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 15:39:02 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int const i;
</code></pre>
<p>Unschön. Du verbietest damit den op=</p>
</blockquote>
<p>Stimmt.<br />
Also dann ohne const .... (wenigstens private)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653926</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 28 Jan 2009 15:39:02 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 16:15:33 GMT]]></title><description><![CDATA[<p>123 schrieb:</p>
<blockquote>
<p>Bulli schrieb:</p>
<blockquote>
<p>Eigentlich ist ja <strong>for_each</strong> (wie der Name sagt) <strong>für jedes</strong> Element (von deq1.begin bis deq1.end) gedacht. Das machst du aber nicht, und somit missbrauchst du for_each.</p>
</blockquote>
<p>Also nochmal. Das mit dem tauschen der Werte war nur ein Beispiel. Dass das nicht viel Sinn ergibt ist mir schon klar.</p>
</blockquote>
<p>Du hast mein Post leider nicht verstanden! Das was du willst, geht nicht mit for_each!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

void add ( int i ){
   // was du mit i machen willst... kommt hier rein!
}

int main(){
	std::vector&lt;int&gt; Irgendwas;

	Irgendwas.push_back ( 1 );
	Irgendwas.push_back ( 4 );
	Irgendwas.push_back ( 8 );
	Irgendwas.push_back ( 2 );

        // Das geht nur so:
	std::for_each ( Irgendwas.begin(), Irgendwas.end(), add);

}
</code></pre>
<p>Was macht for_each zur Laufzeit? Sowas:</p>
<pre><code class="language-cpp">add(1);
add(4);
add(8);
add(2);
</code></pre>
<p>Mehr macht for_each nicht. Es ruft jedes add mit den Wert aus Irgendwas auf. halt for_each.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653946</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Wed, 28 Jan 2009 16:15:33 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 17:15:05 GMT]]></title><description><![CDATA[<p>Bulli schrieb:</p>
<blockquote>
<p>Du hast mein Post leider nicht verstanden! Das was du willst, geht nicht mit for_each!</p>
</blockquote>
<p>Stimmt, hab dich wirklich erst mal falsch verstanden.<br />
Trotzdem danke nochmal für die ganzen Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653977</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Wed, 28 Jan 2009 17:15:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit for_each on Wed, 28 Jan 2009 23:32:30 GMT]]></title><description><![CDATA[<p><a href="http://cplusplus.com/reference/std/functional/bind1st.html" rel="nofollow">http://cplusplus.com/reference/std/functional/bind1st.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654131</guid><dc:creator><![CDATA[tsstss]]></dc:creator><pubDate>Wed, 28 Jan 2009 23:32:30 GMT</pubDate></item></channel></rss>