<?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 wird nicht richtig zurückgegeben]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich bin gerade dabei ein Programm zu schreiben, welches ein Sodoku lösen soll.<br />
Dazu erstelle ich gerade ne Klasse, die Sodoku heißt und dementsprechend auch das darstellen soll. Bei einer Methode, die nur eine Spalte aus dem Feld zurückgeben soll hakts allerdings schon, da der lokale Vector in der main, in den der zurückgegebene kopiert werden sollte leer ist. Bei der Methode, die eine Reihe zurückgibt habe ich keine Probleme.<br />
Der Vector, den die Spaltenmethode erstellt existiert auch richtig, wird nur nicht richtig zurückgegeben. Aber ein paar Zeilen Code sagen ja bekanntlich mehr, also will ich ihn nicht vorenthalten:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

void show_vector(vector&lt;int&gt;&amp; rvector)
{
	for(int n = 0; n &lt; rvector.size(); n++)
		cout &lt;&lt; rvector[n];
}

class Sodoku
{
	//Eigenschaften
	//
	//9x9 Feld
	//
	vector&lt;vector&lt;int&gt; &gt; field;

public:

	//Konstruktor 
	//
	Sodoku()
	{
		//Begrüßungsbildschirm
		//
		cout &lt;&lt; &quot;_____________________________________\n&quot; &lt;&lt;
			&quot;\tSodoku-Loesungsprogramm\n&quot; &lt;&lt;
			&quot;___________________________________________\n\n&quot;;

		cout &lt;&lt; &quot;-Geben sie die bestehenden Zahlen des 9x9 Felder grossen Quadrates der Reihe nach ein-\n\n&quot;;

		//Gibt dem zweidimensionalen Vector Startwerte
		//
		//in y-Richtung
		//
		field.resize(9);

		//in x-Richtung
		//
		for(int n = 0; n &lt; 9; n++)
		{
			field[n].resize(9);
		}

		int c;

		//Schleife, die das Array initialisiert
		//
		for(int y = 0; y &lt; 9; y++)
		{
			cout &lt;&lt; y+1 &lt;&lt; &quot;. Reihe: &quot;;

			for(int x = 0; x &lt; 9; x++)
			{
				cin &gt;&gt; field[y][x];
				c = cin.get();
			}
		}

	}

	//aktuelles Feld ausgeben

	void show_field()
	{
		cout &lt;&lt; &quot;\n\naktuelles Feld: \n\n&quot;;

		for(int y = 0; y &lt; 9; y++)
		{
			for(int x = 0; x &lt; 9; x++)
			{
				cout &lt;&lt; field[y] [x] &lt;&lt; ' ';
			}
			cout &lt;&lt; endl;
		}
	}

	//Zugriffsmethoden
	//

	//Eine Spalte zurückgeben
	//
	const vector&lt;int&gt;&amp; get_row(unsigned number)
	{
		number--;
		if((number &gt; 0) &amp;&amp; (number &lt; 9))
			return field[number];
	}

	const vector&lt;int&gt;&amp; get_column(unsigned number)
	{
		number--;

			vector&lt;int&gt; column(9);

			for(int n = 0; n &lt; 9; n++)
			{
				column[n] = field[n][number];
			}

                        //Ausgabe des Vectors innerhalb der Funktion.
			show_vector(column);
			return column;
	}
};

int main()
{
	Sodoku sodoku1;

	sodoku1.show_field();

	vector&lt;int&gt; vec(9);
	vec = sodoku1.get_column(2);

	show_vector(vec);

	cout &lt;&lt; vec.size();

        vec = sodoku1.get_row(2);

        show_vector(vec);

        cout &lt;&lt; vec.size();	
}
</code></pre>
<p>Die Ausgabe von vec, nachdem er von get_row() initialisiert wurde, ist gleich der 2ten Reihe des Sodokus. Aber get_column liefert einen leeren Vector zurück. Wie kann das sein?? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Würde mich für Hilfe freuen <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="🙂"
    /></p>
<p>freundliche Grüße, Tim <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312900/vector-wird-nicht-richtig-zurückgegeben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 12:53:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312900.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Jan 2013 19:53:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector wird nicht richtig zurückgegeben on Wed, 16 Jan 2013 19:53:26 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich bin gerade dabei ein Programm zu schreiben, welches ein Sodoku lösen soll.<br />
Dazu erstelle ich gerade ne Klasse, die Sodoku heißt und dementsprechend auch das darstellen soll. Bei einer Methode, die nur eine Spalte aus dem Feld zurückgeben soll hakts allerdings schon, da der lokale Vector in der main, in den der zurückgegebene kopiert werden sollte leer ist. Bei der Methode, die eine Reihe zurückgibt habe ich keine Probleme.<br />
Der Vector, den die Spaltenmethode erstellt existiert auch richtig, wird nur nicht richtig zurückgegeben. Aber ein paar Zeilen Code sagen ja bekanntlich mehr, also will ich ihn nicht vorenthalten:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

void show_vector(vector&lt;int&gt;&amp; rvector)
{
	for(int n = 0; n &lt; rvector.size(); n++)
		cout &lt;&lt; rvector[n];
}

class Sodoku
{
	//Eigenschaften
	//
	//9x9 Feld
	//
	vector&lt;vector&lt;int&gt; &gt; field;

public:

	//Konstruktor 
	//
	Sodoku()
	{
		//Begrüßungsbildschirm
		//
		cout &lt;&lt; &quot;_____________________________________\n&quot; &lt;&lt;
			&quot;\tSodoku-Loesungsprogramm\n&quot; &lt;&lt;
			&quot;___________________________________________\n\n&quot;;

		cout &lt;&lt; &quot;-Geben sie die bestehenden Zahlen des 9x9 Felder grossen Quadrates der Reihe nach ein-\n\n&quot;;

		//Gibt dem zweidimensionalen Vector Startwerte
		//
		//in y-Richtung
		//
		field.resize(9);

		//in x-Richtung
		//
		for(int n = 0; n &lt; 9; n++)
		{
			field[n].resize(9);
		}

		int c;

		//Schleife, die das Array initialisiert
		//
		for(int y = 0; y &lt; 9; y++)
		{
			cout &lt;&lt; y+1 &lt;&lt; &quot;. Reihe: &quot;;

			for(int x = 0; x &lt; 9; x++)
			{
				cin &gt;&gt; field[y][x];
				c = cin.get();
			}
		}

	}

	//aktuelles Feld ausgeben

	void show_field()
	{
		cout &lt;&lt; &quot;\n\naktuelles Feld: \n\n&quot;;

		for(int y = 0; y &lt; 9; y++)
		{
			for(int x = 0; x &lt; 9; x++)
			{
				cout &lt;&lt; field[y] [x] &lt;&lt; ' ';
			}
			cout &lt;&lt; endl;
		}
	}

	//Zugriffsmethoden
	//

	//Eine Spalte zurückgeben
	//
	const vector&lt;int&gt;&amp; get_row(unsigned number)
	{
		number--;
		if((number &gt; 0) &amp;&amp; (number &lt; 9))
			return field[number];
	}

	const vector&lt;int&gt;&amp; get_column(unsigned number)
	{
		number--;

			vector&lt;int&gt; column(9);

			for(int n = 0; n &lt; 9; n++)
			{
				column[n] = field[n][number];
			}

                        //Ausgabe des Vectors innerhalb der Funktion.
			show_vector(column);
			return column;
	}
};

int main()
{
	Sodoku sodoku1;

	sodoku1.show_field();

	vector&lt;int&gt; vec(9);
	vec = sodoku1.get_column(2);

	show_vector(vec);

	cout &lt;&lt; vec.size();

        vec = sodoku1.get_row(2);

        show_vector(vec);

        cout &lt;&lt; vec.size();	
}
</code></pre>
<p>Die Ausgabe von vec, nachdem er von get_row() initialisiert wurde, ist gleich der 2ten Reihe des Sodokus. Aber get_column liefert einen leeren Vector zurück. Wie kann das sein?? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Würde mich für Hilfe freuen <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="🙂"
    /></p>
<p>freundliche Grüße, Tim <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290427</guid><dc:creator><![CDATA[Hobby-Coder]]></dc:creator><pubDate>Wed, 16 Jan 2013 19:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vector wird nicht richtig zurückgegeben on Wed, 16 Jan 2013 20:05:58 GMT]]></title><description><![CDATA[<pre><code>const vector&lt;int&gt;&amp; get_column(unsigned number)
</code></pre>
<p>Du gibst eine Referenz auf das lokale <code>column</code> zurück. Was da passiert ist nicht definiert. Gib einfach 'ne Kopie raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290432</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 16 Jan 2013 20:05:58 GMT</pubDate></item><item><title><![CDATA[Reply to Vector wird nicht richtig zurückgegeben on Wed, 16 Jan 2013 20:06:14 GMT]]></title><description><![CDATA[<p>Referenz auf lokales Objekt, vielleicht?<br />
Sollte man NIE machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290433</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 16 Jan 2013 20:06:14 GMT</pubDate></item><item><title><![CDATA[Reply to Vector wird nicht richtig zurückgegeben on Wed, 16 Jan 2013 20:32:26 GMT]]></title><description><![CDATA[<p>Ok, ich hab mir schon überlegt, dass es daran liegen könnte, aber war mir nciht ganz sicher.<br />
Wie kann ich das denn umgehen?</p>
<p>Ne Kopie, vermutlich von column? und wo?</p>
<p>Könnte column aufm heap anlegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290440</guid><dc:creator><![CDATA[Hobby-Coder]]></dc:creator><pubDate>Wed, 16 Jan 2013 20:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vector wird nicht richtig zurückgegeben on Wed, 16 Jan 2013 20:34:45 GMT]]></title><description><![CDATA[<pre><code>vector&lt;int&gt; getColumn...
{
    ...
    return column; // oder C++11: return std::move(column);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2290442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290442</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 16 Jan 2013 20:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vector wird nicht richtig zurückgegeben on Wed, 16 Jan 2013 20:37:56 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<pre><code>return column; // oder C++11: return std::move(column);
</code></pre>
</blockquote>
<p>Selbst in C++11 würde man auf das <code>std::move</code> weil der Code dann langsamer wird (erzwungener Move-Konstruktor vs. nichts (NRVO)).</p>
<p>@Hobby-Coder: <code>return column</code> kostet wegen Compiler-Optimierungen nie etwas (<a href="http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/" rel="nofollow">klick</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290443</guid><dc:creator><![CDATA[der greise]]></dc:creator><pubDate>Wed, 16 Jan 2013 20:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Vector wird nicht richtig zurückgegeben on Wed, 16 Jan 2013 20:53:37 GMT]]></title><description><![CDATA[<p>Hm, hätte man auch iwie selbst drauf kommen können, aber was nciht sein kann, was nicht sein darf..<br />
Naja, Danke für die Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290447</guid><dc:creator><![CDATA[Hobby-Coder]]></dc:creator><pubDate>Wed, 16 Jan 2013 20:53:37 GMT</pubDate></item><item><title><![CDATA[Reply to Vector wird nicht richtig zurückgegeben on Thu, 17 Jan 2013 08:10:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">const vector&lt;int&gt;&amp; get_column(unsigned number) 
{ 
   number--;
   ...
}
</code></pre>
<p>sieht auch gefährlich aus. Was passiert, wenn <code>number</code> 0 ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2290516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2290516</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 17 Jan 2013 08:10:32 GMT</pubDate></item></channel></rss>