<?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[variadic template - Elemente einen vector hinzufügen]]></title><description><![CDATA[<p>Gibt es eine Möglichkeit alle Elemente hinzuzufügen ohne einen Kontainer zu erstellen?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;array&gt;

template&lt;typename T, typename... Args&gt;
void addAll(std::vector&lt;T&gt;&amp; vec, Args... args)
{
	std::array&lt;T, sizeof...(args)&gt; array = { args... };
	for (const auto&amp; i : array)
	{
		vec.push_back(i);
	}
}

int main()
{
	std::vector&lt;int&gt; vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	addAll(vec, 10, 11, 12, 13, 14, 15);

	for (const auto&amp; i : vec)
	{
		std::cout &lt;&lt; i &lt;&lt; &quot;\n&quot;;
	}
	std::getchar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/338999/variadic-template-elemente-einen-vector-hinzufügen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 11:19:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338999.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Jul 2016 19:10:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to variadic template - Elemente einen vector hinzufügen on Tue, 26 Jul 2016 19:10:53 GMT]]></title><description><![CDATA[<p>Gibt es eine Möglichkeit alle Elemente hinzuzufügen ohne einen Kontainer zu erstellen?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;array&gt;

template&lt;typename T, typename... Args&gt;
void addAll(std::vector&lt;T&gt;&amp; vec, Args... args)
{
	std::array&lt;T, sizeof...(args)&gt; array = { args... };
	for (const auto&amp; i : array)
	{
		vec.push_back(i);
	}
}

int main()
{
	std::vector&lt;int&gt; vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	addAll(vec, 10, 11, 12, 13, 14, 15);

	for (const auto&amp; i : vec)
	{
		std::cout &lt;&lt; i &lt;&lt; &quot;\n&quot;;
	}
	std::getchar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503569</guid><dc:creator><![CDATA[variadic noob]]></dc:creator><pubDate>Tue, 26 Jul 2016 19:10:53 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template - Elemente einen vector hinzufügen on Tue, 26 Jul 2016 19:41:13 GMT]]></title><description><![CDATA[<p>Ja - Indem du die Funktion rekursiv aufrufst. Um die Rekursion zu stoppen brauchst du einen Rekursionsanker.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void f(std::vector&lt;T&gt;&amp; ) {} // Rekursionsanker - Wenn arguments... ins Nichts expandiert

template&lt;typename T, typename Head, typename... Args&gt;
void f(std::vector&lt;T&gt;&amp; container, Head&amp;&amp; head, Args&amp;&amp;... arguments){
    container.push_back(std::forward&lt;Head&gt;(head));
    f(container, std::forward&lt;Args&gt;(arguments)...); // head wurde hinzugefügt - fahre fort mit den restlichen Argumenten
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503573</guid><dc:creator><![CDATA[546544654]]></dc:creator><pubDate>Tue, 26 Jul 2016 19:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template - Elemente einen vector hinzufügen on Tue, 26 Jul 2016 21:12:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct sequential_exec
{
    template &lt;typename... T&gt;
    constexpr sequential_exec(T&amp;&amp;...) noexcept {}
};

template&lt;typename T, typename... Args&gt;
void addAll(std::vector&lt;T&gt;&amp; vec, Args&amp;&amp;... args)
{
    // emplace_back gibt eine Referenz zurück, damit erübrigt sich der Kommaoperatorhack
    sequential_exec{ vec.emplace_back( std::forward&lt;Args&gt;( args ) )... };
}
</code></pre>
<p>und in C++17 dann zu</p>
<pre><code class="language-cpp">template&lt;typename T, typename... Args&gt;
void addAll(std::vector&lt;T&gt;&amp; vec, Args&amp;&amp;... args)
{
    ( vec.push_back( std::forward&lt;Args&gt;( args ) ), ... );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503578</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 26 Jul 2016 21:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template - Elemente einen vector hinzufügen on Wed, 27 Jul 2016 18:42:33 GMT]]></title><description><![CDATA[<p>Ist das mit dem Rekursionsanker eigentlich weniger effizienter, als das andere? Oder tut das hier nicht zur Sache?<br />
Ich weiß jetzt nicht, wie ich ASM Code dazu ansehen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503704</guid><dc:creator><![CDATA[vnoob]]></dc:creator><pubDate>Wed, 27 Jul 2016 18:42:33 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template - Elemente einen vector hinzufügen on Wed, 27 Jul 2016 19:38:04 GMT]]></title><description><![CDATA[<p>vnoob schrieb:</p>
<blockquote>
<p>Ist das mit dem Rekursionsanker eigentlich weniger effizienter, als das andere?</p>
</blockquote>
<p>Theoretisch nicht. Die Ausdrücke, die Nebeneffekte erzeugen, sind schließlich die Gleichen.<br />
Praktisch wäre es denkbar, das der Compiler ab einer gewissen Rekursionstiefe das Inlining aufgibt, was sich ggf. (sehr geringfügig) negativ auswirken könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503719</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 27 Jul 2016 19:38:04 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template - Elemente einen vector hinzufügen on Tue, 02 Aug 2016 13:58:47 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct sequential_exec
{
    template &lt;typename... T&gt;
    constexpr sequential_exec(T&amp;&amp;...) noexcept {}
};

template&lt;typename T, typename... Args&gt;
void addAll(std::vector&lt;T&gt;&amp; vec, Args&amp;&amp;... args)
{
    // emplace_back gibt eine Referenz zurück, damit erübrigt sich der Kommaoperatorhack
    sequential_exec{ vec.emplace_back( std::forward&lt;Args&gt;( args ) )... };
}
</code></pre>
</blockquote>
<p>Das geht so nicht in C++14. In C++14 ist emplace_back void, eine Referenz wird erst in C++17 zurückgegeben. Der ansckließende pack fold Ausdruck für C++17 ist ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2504405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2504405</guid><dc:creator><![CDATA[std14]]></dc:creator><pubDate>Tue, 02 Aug 2016 13:58:47 GMT</pubDate></item><item><title><![CDATA[Reply to variadic template - Elemente einen vector hinzufügen on Tue, 02 Aug 2016 14:58:17 GMT]]></title><description><![CDATA[<p>Ah, stimmt. Das passiert, wenn man nur in den letzten Draft schaut.<br />
Also so in C++11 und C++14:</p>
<pre><code class="language-cpp">template&lt;typename T, typename... Args&gt;
void addAll(std::vector&lt;T&gt;&amp; vec, Args&amp;&amp;... args)
{
    sequential_exec{ ( vec.push_back( std::forward&lt;Args&gt;( args ) ), 0 )... };
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2504416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2504416</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 02 Aug 2016 14:58:17 GMT</pubDate></item></channel></rss>