<?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[Übergabe Feldgröße [solved]]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich wollte fragen ob es eine Möglichkeit gibt bei einfachen Funktionen die Länge eines Feldes so zu übergeben wie es zum Beispiel bei einem template Möglich wäre?<br />
Ich meine das folgendermaßen:</p>
<p>Definition einr Funktion als Template:</p>
<pre><code>template &lt;size_t N&gt;
int mat_operation(const double mat[N], double result[N])
{
    for(size_t i = 0; i &lt; N; i++){
        result[i] = mat[i] * +1;
    }

    return 0;
}
</code></pre>
<p>Der Aufruf in der Main wäre dann in der Art:</p>
<pre><code>int main(){
    double vektor[6] = {1,2,3,4,5,6};
    double vektor_plus1[6];

    mat_operations&lt;6&gt;(vektor, vektor_plus1);

    return 0;
}
</code></pre>
<p>Ist es nun möglich den Aufruf so wie er in der Main vollzogen wird (mit Übergabe der Vektorgröße in den dreieckigen Klammern) ohne ein Template hinzukriegen? Wie muss dann die Funktionsdeklaration aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316315/übergabe-feldgröße-solved</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 02:24:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316315.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Apr 2013 09:02:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 12:15:09 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich wollte fragen ob es eine Möglichkeit gibt bei einfachen Funktionen die Länge eines Feldes so zu übergeben wie es zum Beispiel bei einem template Möglich wäre?<br />
Ich meine das folgendermaßen:</p>
<p>Definition einr Funktion als Template:</p>
<pre><code>template &lt;size_t N&gt;
int mat_operation(const double mat[N], double result[N])
{
    for(size_t i = 0; i &lt; N; i++){
        result[i] = mat[i] * +1;
    }

    return 0;
}
</code></pre>
<p>Der Aufruf in der Main wäre dann in der Art:</p>
<pre><code>int main(){
    double vektor[6] = {1,2,3,4,5,6};
    double vektor_plus1[6];

    mat_operations&lt;6&gt;(vektor, vektor_plus1);

    return 0;
}
</code></pre>
<p>Ist es nun möglich den Aufruf so wie er in der Main vollzogen wird (mit Übergabe der Vektorgröße in den dreieckigen Klammern) ohne ein Template hinzukriegen? Wie muss dann die Funktionsdeklaration aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319576</guid><dc:creator><![CDATA[Freddy_Kay]]></dc:creator><pubDate>Mon, 29 Apr 2013 12:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 09:44:28 GMT]]></title><description><![CDATA[<p>Warum sollte man sowas machen wollen, wenn man std::vector und std::array benutzen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319588</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 29 Apr 2013 09:44:28 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 10:13:34 GMT]]></title><description><![CDATA[<p>Die mir vorliegende Implementierung arbeitet ohne STL mit einfachen Arrays. Ich möchte nicht alles ändern.</p>
<p>Das Template funktioniert sehr gut, allerdings geht es mir um die Strukturierung und daher frage ich mich ob das was ich mit dem template erreiche eigentlich auch mit normalen Funktionen möglich ist.</p>
<p>EDIT//:</p>
<p>Im übrigen bin ich der Meinung dass bei std::arrays die Arraygröße mitgegeben werden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319599</guid><dc:creator><![CDATA[Freddy_Kay]]></dc:creator><pubDate>Mon, 29 Apr 2013 10:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 10:16:16 GMT]]></title><description><![CDATA[<p>Freddy_Kay schrieb:</p>
<blockquote>
<p>Die mir vorliegende Implementierung arbeitet ohne STL mit einfachen Arrays. Ich möchte nicht alles ändern.</p>
</blockquote>
<p>ok.</p>
<p>Freddy_Kay schrieb:</p>
<blockquote>
<p>Im übrigen bin ich der Meinung dass bei std::arrays die Arraygröße mitgegeben werden muss.</p>
</blockquote>
<p>diese Meinung hast du aber ziemlich exklusiv. Oder was genau spricht gegen die Verwendung von <a href="http://en.cppreference.com/w/cpp/container/array/size" rel="nofollow">std::array::size</a>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319603</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 29 Apr 2013 10:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 10:26:22 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>Freddy_Kay schrieb:</p>
<blockquote>
<p>Im übrigen bin ich der Meinung dass bei std::arrays die Arraygröße mitgegeben werden muss.</p>
</blockquote>
<p>diese Meinung hast du aber ziemlich exklusiv. Oder was genau spricht gegen die Verwendung von <a href="http://en.cppreference.com/w/cpp/container/array/size" rel="nofollow">std::array::size</a>?</p>
</blockquote>
<p>Wie überebe ich ein std::array an eine Funktion ohne bereits zur Compilezeit zu sagen wie groß das Array wird?</p>
<p>EDIT//:</p>
<p>Und bringt mich dass dann der Lösung meines ursprünglichen Problems näher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319605</guid><dc:creator><![CDATA[Freddy_Kay]]></dc:creator><pubDate>Mon, 29 Apr 2013 10:26:22 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 10:33:52 GMT]]></title><description><![CDATA[<p>achso, das meinst du...</p>
<p>man könnte natürlich mit data() und size() zur C-Lösung zurückgehen:</p>
<pre><code class="language-cpp">void doSomething(int* array, size_t n);

std::array&lt;int, 3&gt; arr = {1,2,3};
doSomething(arr.data(), arr.size());
</code></pre>
<p>oder im Stil der STL-Algorithmen Iteratoren übergeben:</p>
<pre><code class="language-cpp">doSomethingDifferent(arr.begin(), arr.end());
</code></pre>
<p>edit: hm... jetzt bin ich selber abgeschweift. Nein, deinem ursprünglichen Problem wird das wohl kaum weiterhelfen. sorry...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319609</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 29 Apr 2013 10:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 10:39:22 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>achso, das meinst du...</p>
<p>man könnte natürlich mit data() und size() zur C-Lösung zurückgehen:</p>
<pre><code class="language-cpp">void doSomething(int* array, size_t n);

std::array&lt;int, 3&gt; arr = {1,2,3};
doSomething(arr.data(), arr.size());
</code></pre>
<p>oder im Stil der STL-Algorithmen Iteratoren übergeben:</p>
<pre><code class="language-cpp">doSomethingDifferent(arr.begin(), arr.end());
</code></pre>
</blockquote>
<p>Die erste Lösung ist sicher machbar und simpel. Ich wollte aber eben, dass die Arraygröße nicht als weiterer Parameter übergeben wird, sondern wie in der Templatelösung mit</p>
<pre><code>funtction&lt; int größe_des_array &gt;(parameterliste)
</code></pre>
<p>Bzw. hab ich mich gefragt ob das auch bei normalen Funktionen möglich ist, oder halt eine Eigenschaft der Templates abbildet.</p>
<p>Für die zweite Lösung müsste ich dann, da das alles keine STL container sind, mit Zeigern arbeiten. Da bleib ich dann doch lieber beim Template.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319611</guid><dc:creator><![CDATA[Freddy_Kay]]></dc:creator><pubDate>Mon, 29 Apr 2013 10:39:22 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 12:02:47 GMT]]></title><description><![CDATA[<p>Das geht nicht mit normalen Funktionen, weil N ja zur Compilezeit bekannt sein muss -&gt; Templateparameter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319629</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 29 Apr 2013 12:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 12:15:41 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Das geht nicht mit normalen Funktionen, weil N ja zur Compilezeit bekannt sein muss -&gt; Templateparameter.</p>
</blockquote>
<p>Alles klar. Danke an beide Poster!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319631</guid><dc:creator><![CDATA[Freddy_Kay]]></dc:creator><pubDate>Mon, 29 Apr 2013 12:15:41 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe Feldgröße [solved] on Mon, 29 Apr 2013 12:53:57 GMT]]></title><description><![CDATA[<p>Freddy_Kay schrieb:</p>
<blockquote>
<p>Für die zweite Lösung müsste ich dann, da das alles keine STL container sind, mit Zeigern arbeiten. Da bleib ich dann doch lieber beim Template.</p>
</blockquote>
<p>Zeiger oder Iterator, ist doch für Dich transparent.<br />
C++11 kommt mit <code>begin()</code> und <code>end()</code> für Arrays (sind ansonsten aber auch trivial zu implementieren) und Du würdest bei einer Lösung bleiben, die typisch für C++ ist.</p>
<pre><code class="language-cpp">template &lt;class T, size_t N&gt; T* begin(T (&amp;array)[N]) { return array; }
template &lt;class T, size_t N&gt; T* end(T (&amp;array)[N]) { return array + N; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2319638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319638</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Mon, 29 Apr 2013 12:53:57 GMT</pubDate></item></channel></rss>