<?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[Initialisierung von vector&amp;lt;T&amp;gt; in C++11]]></title><description><![CDATA[<p>Folgende Situation:</p>
<p>Ich habe Klassen T, S mit einem</p>
<pre><code class="language-cpp">T operator+(T t, S s)
</code></pre>
<p>und einen vector&lt;T&gt;, den ich als Konstante initialisieren will mit</p>
<pre><code class="language-cpp">{T(0) + S(0), T(0) + S(1), T(0) + S(2), ..., T(0) + S(10)}
</code></pre>
<p>Kann man das in C++11 und lambda funktions so elegant wie mit Lisp und mapcar machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297077/initialisierung-von-vector-lt-t-gt-in-c-11</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 16:16:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297077.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Dec 2011 19:51:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 19:51:56 GMT]]></title><description><![CDATA[<p>Folgende Situation:</p>
<p>Ich habe Klassen T, S mit einem</p>
<pre><code class="language-cpp">T operator+(T t, S s)
</code></pre>
<p>und einen vector&lt;T&gt;, den ich als Konstante initialisieren will mit</p>
<pre><code class="language-cpp">{T(0) + S(0), T(0) + S(1), T(0) + S(2), ..., T(0) + S(10)}
</code></pre>
<p>Kann man das in C++11 und lambda funktions so elegant wie mit Lisp und mapcar machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158514</guid><dc:creator><![CDATA[c++11 rulez]]></dc:creator><pubDate>Sun, 18 Dec 2011 19:51:56 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 19:53:18 GMT]]></title><description><![CDATA[<p>wat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158517</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Dec 2011 19:53:18 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 19:55:03 GMT]]></title><description><![CDATA[<p>wat wat?</p>
<p>Ich will sowas wie</p>
<pre><code>(mapcar #'(lambda (n) (+ n 1337)) (0 1 2 3 4))
</code></pre>
<p>haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158518</guid><dc:creator><![CDATA[c++11 rulez]]></dc:creator><pubDate>Sun, 18 Dec 2011 19:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 20:00:32 GMT]]></title><description><![CDATA[<p>Mal in Code gefasst:</p>
<pre><code class="language-cpp">struct foo {};
struct bar {};

foo operator + (foo, bar);

std::vector&lt;foo&gt; v1;
std::vector&lt;bar&gt; v2;

std::vector&lt;foo&gt; v3; // soll jetzt die werte von v1 und v2 addiert enthalten?
</code></pre>
<p>Habe ich dich richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158519</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:00:32 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 20:00:05 GMT]]></title><description><![CDATA[<p>Fast: v3 soll die Inhalte von einem festen foo addiert zu allen Werten von v2 enthalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158521</guid><dc:creator><![CDATA[c++11 rulez]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 20:04:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct foo{};
struct bar{};

foo operator + (foo, bar);

std::vector&lt;foo&gt; values;
bar to_add;

std::vector&lt;foo&gt; result;

std:transform
(
    values.begin(),
    values.end(),
    std::back_inserter(result),

    [&amp;] (foo f)
    {
        return f + to_add;
    }
);
</code></pre>
<p>Sowas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158525</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:04:10 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 20:06:12 GMT]]></title><description><![CDATA[<p>Fast: Es soll aber für die Initialisierung für eine *Konstante* const vector &lt;foo&gt; sein, d.h. es muss in eine Zeile passen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158527</guid><dc:creator><![CDATA[c++11 rulez]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 20:08:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::vector&lt;foo&gt; gimmetheresult()
{
    std::vector&lt;foo&gt; result;
    ....
    return result;
}

const std::vector&lt;foo&gt; myvalues(gimmetheresult());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2158528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158528</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 20:16:23 GMT]]></title><description><![CDATA[<p>Thx! Das scheint zu funzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158532</guid><dc:creator><![CDATA[c++11 rulez]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:16:23 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 20:33:35 GMT]]></title><description><![CDATA[<p>Darf ich fragen womit du c++11 . Hast du ein Tutorial oder so und welchen compiler benutzt du ?</p>
<p>Wurde mich sehr freuen wenn dus mir sagen konntest !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158537</guid><dc:creator><![CDATA[Cho++]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 20:35:21 GMT]]></title><description><![CDATA[<p>Ich verwende den g++ 4.6.2 auf Fedora Linux 64.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158538</guid><dc:creator><![CDATA[c++11 rulez]]></dc:creator><pubDate>Sun, 18 Dec 2011 20:35:21 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Sun, 18 Dec 2011 21:29:34 GMT]]></title><description><![CDATA[<p>Wenn es Ranges gäbe, würde mir das hier fast noch besser gefallen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;functional&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

struct foo
{
	int value;

	foo(int value)
		: value(value)
	{}
};

struct bar
{
	int value;

	bar(int value)
		: value(value)
	{}
};

foo operator + (foo f, bar b)
{
	return foo(f.value + b.value);
}

template &lt;typename Iterator, typename OutType&gt;
struct transforming_iterator : std::iterator&lt;std::input_iterator_tag, OutType&gt;
{
	typedef typename Iterator::value_type in_type;

	Iterator iter;
	std::function&lt;OutType(in_type const&amp;)&gt; transform;

	transforming_iterator(Iterator iter, std::function&lt;OutType(in_type const&amp;)&gt; const&amp; transform)
		: iter(iter)
		, transform(transform)
	{}

	OutType operator * () const
	{
		return transform(*iter);
	}

	transforming_iterator&amp; operator ++ ()
	{
		++iter;
		return *this;
	}

	transforming_iterator operator ++ (int)
	{
		transforming_iterator tmp(*this);
		++*this;
		return tmp;
	}

	friend bool operator == (transforming_iterator const&amp; first, transforming_iterator const&amp; second)
	{
		return first.iter == second.iter;
	}

	friend bool operator != (transforming_iterator const&amp; first, transforming_iterator const&amp; second)
	{
		return !(first == second);
	}
};

template &lt;typename InType, typename OutType, typename Iterator&gt;
transforming_iterator&lt;Iterator, OutType&gt; make_transforming_iterator(Iterator iter, std::function&lt;OutType(InType const&amp;)&gt; const&amp; transform)
{
	return transforming_iterator&lt;Iterator, OutType&gt;(iter, transform);
}

int main()
{
	std::vector&lt;bar&gt; bars;
	int init = 0;
	std::generate_n(std::back_inserter(bars), 20, [&amp;] () { return bar(init++); });

	foo const to_add(42);
	auto transform = [&amp;] (bar const&amp; b) { return to_add + b; };

	std::vector&lt;foo&gt; const foos(make_transforming_iterator&lt;bar, foo&gt;(bars.begin(), transform), make_transforming_iterator&lt;bar, foo&gt;(bars.end(), transform));

	for(foo const&amp; f : foos)
		std::cout &lt;&lt; f.value &lt;&lt; '\n';
}
</code></pre>
<p>Und generate_n könnte man auch noch durch einen generating_iterator ersetzen. Das hätte den Vorteil, dass ich den vector&lt;bar&gt; nicht bräuchte, also die Werte nichtmal im Speicher liegen müssten. Iteratoren in C++ sind halt einfach sexy <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2764.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--red_heart"
      title="&lt;3"
      alt="❤"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158548</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Dec 2011 21:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung von vector&amp;lt;T&amp;gt; in C++11 on Mon, 19 Dec 2011 08:47:30 GMT]]></title><description><![CDATA[<p>c++11 rulez schrieb:</p>
<blockquote>
<p>Ich will sowas wie</p>
<pre><code>(mapcar #'(lambda (n) (+ n 1337)) (0 1 2 3 4))
</code></pre>
<p>haben.</p>
</blockquote>
<p>Dann baue dir doch eine mapcar-Funktion als Template, wenn dir <a href="http://www.cplusplus.com/reference/algorithm/transform/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/transform/</a> zu lang ist.</p>
<blockquote>
<p>Fast: Es soll aber für die Initialisierung für eine *Konstante* const vector &lt;foo&gt; sein, d.h. es muss in eine Zeile passen.</p>
</blockquote>
<p>Dumme Begruendung. Zusaetzlich ist die Laenge einer Zeile unterschiedlich von Fall zu Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2158614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2158614</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 19 Dec 2011 08:47:30 GMT</pubDate></item></channel></rss>