<?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[Vector als Rückgabewert einer Funktion?]]></title><description><![CDATA[<p>Kurze Frage: Kann ich einen Vector von einer Funktion an eine andere Funktion uebergeben, beispielsweise um dort den Inhalt auszuwerten?</p>
<p>Danke im voraus.</p>
<p>Guenther</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197372/vector-als-rückgabewert-einer-funktion</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 05:03:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197372.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Nov 2007 17:28:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Fri, 09 Nov 2007 17:28:16 GMT]]></title><description><![CDATA[<p>Kurze Frage: Kann ich einen Vector von einer Funktion an eine andere Funktion uebergeben, beispielsweise um dort den Inhalt auszuwerten?</p>
<p>Danke im voraus.</p>
<p>Guenther</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400468</guid><dc:creator><![CDATA[gboelter]]></dc:creator><pubDate>Fri, 09 Nov 2007 17:28:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Fri, 09 Nov 2007 17:31:32 GMT]]></title><description><![CDATA[<p>Natürlich... du musst aber den Typ festlegen, oder die Funktion muss auch ein template sein.</p>
<pre><code class="language-cpp">// das geht:
std::vector&lt;int&gt; getData();

// das geht nicht:
std::vector getData();
</code></pre>
<p>rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400471</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 09 Nov 2007 17:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Fri, 09 Nov 2007 17:47:15 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Natürlich... du musst aber den Typ festlegen, oder die Funktion muss auch ein template sein.</p>
<pre><code class="language-cpp">// das geht:
std::vector&lt;int&gt; getData();

// das geht nicht:
std::vector getData();
</code></pre>
<p>rya.</p>
</blockquote>
<p>In meiner Funktion habe ich ein</p>
<pre><code class="language-cpp">vector&lt;string&gt;list_selected;
</code></pre>
<p>stehen, das sollte dann also richtig sein.</p>
<p>Und dann geht's weiter mit</p>
<pre><code class="language-cpp">while (st.fetch())
    {
        list_selected.push_back(s);
    }

int max = list_selected.size();

cout &lt;&lt; &quot;Anzahl: &quot; &lt;&lt; max &lt;&lt; endl;

for (int index = 0; index &lt; max; index++)
    {
        cout &lt;&lt; list_selected.at(index) &lt;&lt; endl;
    }
</code></pre>
<p>Ich bin mir zwar nicht sicher, ob der Code so wirklich richtig ist, aber die Ausgabe funktioniert einwandfrei.</p>
<p>Trotzdem habe ich immer noch nicht verstanden, wie ich den Vector nun an eine andere Funktion uebergeben kann um die weitere Auswertung dort vorzunehmen.</p>
<p>Ein simples 'return list_selected' oder aber via Referenz duerfte nicht gehen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400475</guid><dc:creator><![CDATA[gboelter]]></dc:creator><pubDate>Fri, 09 Nov 2007 17:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Fri, 09 Nov 2007 17:54:51 GMT]]></title><description><![CDATA[<p>Doch genau so simpel ist es... allerdings solltest du nur eine Referenz übergeben, wenn das objekt nach der Funktion weiterlebt.</p>
<p>Beispiel</p>
<pre><code class="language-cpp">std::vector&lt;int&gt;&amp; getData()
{
   std::vector&lt;int&gt; data;
   return data; &lt;-- schlecht, data wird nach der Funktion zerstört.
}

// Besser:
std::vector&lt;int&gt; getData()
{
   std::vector&lt;int&gt; data;
   return data; &lt;-- gut, weil einfach eine Kopie übergeben wird...
}
</code></pre>
<p>Du kannst jeden Datentyp/Objekt einfach mit &quot;return xy&quot; zurückgeben :). Ist also keine Hexerei.</p>
<p>edit: Hab dir ein kleines Beispielprogramm geschrieben, zu Veranschaulichung:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

std::vector&lt;std::string&gt; getData()
{
    std::vector&lt;std::string&gt; data;
    data.push_back(&quot;foo&quot;);
    data.push_back(&quot;bar&quot;);
    return data;
}

int main()
{
   std::vector&lt;std::string&gt; content;
   content = getData();
   std::cout &lt;&lt; content.at(0) &lt;&lt; std::endl;
   std::cout &lt;&lt; content.at(1) &lt;&lt; std::endl;
}
</code></pre>
<p>rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400477</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 09 Nov 2007 17:54:51 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Fri, 09 Nov 2007 17:55:34 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Doch genau so simpel ist es... allerdings solltest du nur eine Referenz übergeben, wenn das objekt nach der Funktion weiterlebt.</p>
</blockquote>
<p>Guter Hinweis, danke!</p>
<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Du kannst jeden Datentyp/Objekt einfach mit &quot;return xy&quot; zurückgeben :). Ist also keine Hexerei.<br />
rya.</p>
</blockquote>
<p>Und ich war mir so sicher, dass es so einfach bestimmt nicht gehen kann, dass ich's nicht mal probiert habe.</p>
<p>Aber ok, so ist das halt imer mal wieder bei C++.</p>
<p>Danke fuer Deine pronpte Hilfe ...</p>
<p>Guenther</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400480</guid><dc:creator><![CDATA[gboelter]]></dc:creator><pubDate>Fri, 09 Nov 2007 17:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Sat, 10 Nov 2007 00:32:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
struct basic_string_array
{ typedef type std::vector&lt; std::basic_string&lt;T&gt; &gt;; }
typedef string_array basic_string_array&lt;char&gt;::type;
typedef wstring_array basic_string_array(wchar_t&gt;::type;

void get_default_value(string_array&amp; dest)
{
    dest.clear();
    for (std::size_t i = 0; i &lt; 10; ++i) dest.push_back(i + 1);
}

int main()
{
    string_array my_strings;
    get_default_value(my_strings);
}
</code></pre>
<p>Das ist performanter, als eine Kopie zu erzeugen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400672</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 10 Nov 2007 00:32:05 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Sat, 10 Nov 2007 05:49:13 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct basic_string_array
{ typedef type std::vector&lt; std::basic_string&lt;T&gt; &gt;; }
typedef string_array basic_string_array&lt;char&gt;::type;
typedef wstring_array basic_string_array(wchar_t&gt;::type;

void get_default_value(string_array&amp; dest)
{
    dest.clear();
    for (std::size_t i = 0; i &lt; 10; ++i) dest.push_back(i + 1);
}

int main()
{
    string_array my_strings;
    get_default_value(my_strings);
}
</code></pre>
<p>Das ist performanter, als eine Kopie zu erzeugen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Whow, das sieht gut aus, uebersteigt aber derzeit noch meinen Horizont ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Ich bin daher zunaechst mal Scorcher24 gefolgt und das klappt auch praechtig.</p>
<p>Dennoch werde ich mich wohl in den naechsten Tagen auch mal mit Templates &amp; Co beschaeftigen muessen ....</p>
<p>Gruss</p>
<p>Guenther</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400701</guid><dc:creator><![CDATA[gboelter]]></dc:creator><pubDate>Sat, 10 Nov 2007 05:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Sat, 10 Nov 2007 07:13:57 GMT]]></title><description><![CDATA[<p>gboelter schrieb:</p>
<blockquote>
<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct basic_string_array
{ typedef type std::vector&lt; std::basic_string&lt;T&gt; &gt;; }
typedef string_array basic_string_array&lt;char&gt;::type;
typedef wstring_array basic_string_array(wchar_t&gt;::type;

void get_default_value(string_array&amp; dest)
{
    dest.clear();
    for (std::size_t i = 0; i &lt; 10; ++i) dest.push_back(i + 1);
}

int main()
{
    string_array my_strings;
    get_default_value(my_strings);
}
</code></pre>
<p>Das ist performanter, als eine Kopie zu erzeugen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Whow, das sieht gut aus,</p>
</blockquote>
<p>nicht wirklich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400704</guid><dc:creator><![CDATA[kennerDerFormatierung]]></dc:creator><pubDate>Sat, 10 Nov 2007 07:13:57 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Sat, 10 Nov 2007 08:32:49 GMT]]></title><description><![CDATA[<p>Moin (D)Evil,</p>
<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void get_default_value(string_array&amp; dest)
{
    dest.clear();
    for (std::size_t i = 0; i &lt; 10; ++i) dest.push_back(i + 1);
}

int main()
{
    string_array my_strings;
    get_default_value(my_strings);
}
</code></pre>
<p>Das ist performanter, als eine Kopie zu erzeugen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Was gefällt Dir an return value optimization nicht? Quasi jeder Compiler macht sowas ähnliches wie das von Dir geschriebene sowieso automatisch, wenn man einen Typ by-value zurückgibt.</p>
<p>/EDIT: Meist wird das named return value optimization genannt. Finde ich aber doof, klappt ja auch bei Temporaries, also Werten ohne Namen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400715</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 10 Nov 2007 08:32:49 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Sat, 10 Nov 2007 10:03:50 GMT]]></title><description><![CDATA[<p>Ich muss jetzt doch noch mal nachhaken, und bitte nicht gleich schlagen denn in diese Bereiche bin ich in meiner kurzen C++ Zeit noch nicht weiter vorgedrungen.</p>
<p>Wozu brauche ich den Teil mit 'template, struct' etc?</p>
<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct basic_string_array
{ typedef type std::vector&lt; std::basic_string&lt;T&gt; &gt;; }
typedef string_array basic_string_array&lt;char&gt;::type;
typedef wstring_array basic_string_array(wchar_t&gt;::type;
</code></pre>
</blockquote>
<p>Ich habe es bei mir jetzt so geloest:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

int browse(vector&lt;string&gt; &amp;list_selected)
{
    int id;
    int x=1;
    int y=3;

    for (int index = 0; index &lt; max; index++)
    {
        str = list_selected.at(index);
        .
        // some other code ....
        .
    }

    // some other code ....

    return id;
}

int main()
{
    int id;

    vector&lt;string&gt;list_selected;

    id = browse(list_selected);
    list_selected.clear();

    return 0;
}
</code></pre>
<p>und es funktioniert einwandfrei.</p>
<p>Ist das Zufall oder mache ich da einen Denkfehler?</p>
<p>Guenther</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400743</guid><dc:creator><![CDATA[gboelter]]></dc:creator><pubDate>Sat, 10 Nov 2007 10:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vector als Rückgabewert einer Funktion? on Sat, 10 Nov 2007 10:21:44 GMT]]></title><description><![CDATA[<p>Nö, schaut doch gut aus...<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400752</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 10 Nov 2007 10:21:44 GMT</pubDate></item></channel></rss>