<?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[for_each mit Lambda-Ausdruck]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>als selbst ernannter Anfänger in c++ versuche ich mich gerade mit Lambda-Ausdrücken.</p>
<p>In folgendem Code sollen in einer 2d - Deque vom Typ int, Nullen am Ender jeder Reihe entfernt werden. Beispielhaft habe ich zwei Funktionen gegenübergestellt, welche dies erledigen sollen.</p>
<p>Funktion f1 funktioniert wunderbar.<br />
Funktion f2 mit Lambda-Ausdruck funktioniert nicht, es gibt keinen Compilerfehler.</p>
<p>Was mache ich falsch bei f2?</p>
<p>Vielen Dank für eure Denkanstöße.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;deque&gt;
#include &lt;algorithm&gt;

using std::deque;
using std::cout;

typedef deque&lt;int&gt; DI;
typedef deque&lt;DI&gt; DDI;

void f1(DDI &amp;d) {
	for(auto it = d.begin(); it &lt; d.end(); ++it) {
		while(it-&gt;back() == 0) {
			it-&gt;pop_back();
		}
	}
}

void f2(DDI &amp;d) {
	for_each(d.begin(), d.end(), [](DI row) {
		while(row.back() == 0) {
			row.pop_back();
		}
	});
}

void print(DDI &amp;d) {
	for(auto row : d) {
		for_each(row.begin(), row.end(), [](int i) {cout &lt;&lt; i;});
		cout &lt;&lt; &quot;\n&quot;;
	}
	cout &lt;&lt; &quot;\n&quot;;
}

int main() {
	//Nullen am Ende entfernen
	DDI ddi = {{0, 1, 0}, {1, 0, 0}, {1, 0, 1}};
	print(ddi);
	f1(ddi);
	print(ddi);

	ddi = {{0, 1, 0}, {1, 1, 0}, {1, 0, 1}};
	print(ddi);
	f2(ddi);
	print(ddi);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/336731/for_each-mit-lambda-ausdruck</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 20:36:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336731.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Feb 2016 12:03:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to for_each mit Lambda-Ausdruck on Sat, 13 Feb 2016 12:03:42 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>als selbst ernannter Anfänger in c++ versuche ich mich gerade mit Lambda-Ausdrücken.</p>
<p>In folgendem Code sollen in einer 2d - Deque vom Typ int, Nullen am Ender jeder Reihe entfernt werden. Beispielhaft habe ich zwei Funktionen gegenübergestellt, welche dies erledigen sollen.</p>
<p>Funktion f1 funktioniert wunderbar.<br />
Funktion f2 mit Lambda-Ausdruck funktioniert nicht, es gibt keinen Compilerfehler.</p>
<p>Was mache ich falsch bei f2?</p>
<p>Vielen Dank für eure Denkanstöße.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;deque&gt;
#include &lt;algorithm&gt;

using std::deque;
using std::cout;

typedef deque&lt;int&gt; DI;
typedef deque&lt;DI&gt; DDI;

void f1(DDI &amp;d) {
	for(auto it = d.begin(); it &lt; d.end(); ++it) {
		while(it-&gt;back() == 0) {
			it-&gt;pop_back();
		}
	}
}

void f2(DDI &amp;d) {
	for_each(d.begin(), d.end(), [](DI row) {
		while(row.back() == 0) {
			row.pop_back();
		}
	});
}

void print(DDI &amp;d) {
	for(auto row : d) {
		for_each(row.begin(), row.end(), [](int i) {cout &lt;&lt; i;});
		cout &lt;&lt; &quot;\n&quot;;
	}
	cout &lt;&lt; &quot;\n&quot;;
}

int main() {
	//Nullen am Ende entfernen
	DDI ddi = {{0, 1, 0}, {1, 0, 0}, {1, 0, 1}};
	print(ddi);
	f1(ddi);
	print(ddi);

	ddi = {{0, 1, 0}, {1, 1, 0}, {1, 0, 1}};
	print(ddi);
	f2(ddi);
	print(ddi);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2486924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2486924</guid><dc:creator><![CDATA[loofo]]></dc:creator><pubDate>Sat, 13 Feb 2016 12:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to for_each mit Lambda-Ausdruck on Sat, 13 Feb 2016 12:30:05 GMT]]></title><description><![CDATA[<p>Ich glaube, die for_each macht Probleme, wenn du während der Iterationen über den Container dessen Größe änderst. Kann das sein?</p>
<p>Was ich mich aber gerade generell frage:<br />
In deiner f1 function läuft du über ne deque, die wieder deques vom Typ int beinhaltet. Müsstest du da nicht zweimal dereferenzieren, um an die jeweiligen integers zu gelangen? Oder habe ich irgendwo nen Denkfehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2486927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2486927</guid><dc:creator><![CDATA[Sewing]]></dc:creator><pubDate>Sat, 13 Feb 2016 12:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to for_each mit Lambda-Ausdruck on Sat, 13 Feb 2016 12:30:34 GMT]]></title><description><![CDATA[<p>Es wird sinnlos kopiert und auf der Kopie gearbeitet, mach eine Referenz draus:</p>
<pre><code>for_each(d.begin(), d.end(), [](DI&amp; row) {
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2486928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2486928</guid><dc:creator><![CDATA[Faxgerät]]></dc:creator><pubDate>Sat, 13 Feb 2016 12:30:34 GMT</pubDate></item><item><title><![CDATA[Reply to for_each mit Lambda-Ausdruck on Sat, 13 Feb 2016 12:55:07 GMT]]></title><description><![CDATA[<p>@Faxgerät<br />
Oh ja - das war es <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="🙂"
    /><br />
Vielen Dank.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/32457">@Sewing</a><br />
pop_back() bezieht sich auf die 1. Ebene (deque&lt;int&gt;) von deque, nicht auf die 2. Ebene (deque&lt;deque&lt;int&gt; &gt;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2486933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2486933</guid><dc:creator><![CDATA[loofo]]></dc:creator><pubDate>Sat, 13 Feb 2016 12:55:07 GMT</pubDate></item></channel></rss>