<?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 in Vector geht nicht]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem:<br />
Ich habe die Klasse Object (siehe unten). Wenn ich jetzt einen Vector vom Typ Object erstelle (std::vector&lt;Object&gt; objekte) und mir von jedem objekt die Werte per Print() ausgeben lasse, bekomme ich für &quot;foo&quot; (siehe unten) die korrekte (jedes mal eine andere) Ausgabe, jedoch ist der Inhalt von &quot;zahlen&quot; immer gleich.</p>
<p>Es ist vielleicht schwer zu verstehen, was ich damit sagen will, deshalb hier der Quelltext:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;conio.h&gt;

int n;    // zählvariable, um verschiedene Werte zu erhalten

class Object
{
public:
	void Load(int f);    // 'zahlen' mit Werten füllen
	std::vector&lt;int&gt; zahlen;  // vector in dem 10 verschiedene zahlen gespeichert werden
	void Print();     // 'foo' und 'zahlen' ausgeben
	int foo;
};

void Object::Load(int f)
{
	foo = f;
	for(int i = 0; i &lt; 10; i++)
	{
		zahlen.push_back(n);
		n++;
	}
}

void Object::Print()
{
	printf(&quot;foo: %i\n&quot;, foo);   // hier sieht man, dass wirklich mehrere Instanzen von 'Object' erzeugt und in 'objekte' gespeichert wurden, denn es wird immer ein anderer Wert ausgegeben

	for(int i = 0; i &lt; 10; i++)
	{
		printf(&quot;%i\n&quot;, zahlen[i]);  // 'zahlen' ausgeben: hier sollten eigentlich bei jeder Instanz von Object andere Werte ausgegeben werden. Ist aber nicht der Fall. Ausgabe lautet immer 0,1,2,...,9
	}
}

int main()
{
	n = 0;
	std::vector&lt;Object&gt; objekte;

	Object *object = new Object();
	for(int i = 0; i &lt; 10; i++)   // 10 Objekte erstellen und in 'objekte' speichern
	{
		object-&gt;Load(i);
		objekte.push_back(*object);
	}

	for(int i = 0; i &lt; 10; i++)  // bei allen 10 objekten die Print()-Funktion ausführen
	{
		objekte[i].Print();
	}

    getch();
}
</code></pre>
<p>Wenn ich jetzt einen Vector vom Typ Object erstelle und mir von jedem objekt die Werte per Print() ausgeben lasse, bekomme ich für &quot;foo&quot; die korrekte (jedes mal eine andere) Ausgabe, jedoch ist der Inhalt von &quot;zahlen&quot; immer gleich.<br />
Kann das so überhaupt funktionieren? Wie kann ich es richtig machen. Also Ziel des ganzen ist, dass am Ende die Werte ausgegeben werden, die bei Load() eingefügt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181094/vector-in-vector-geht-nicht</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 04:02:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181094.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 May 2007 19:48:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector in Vector geht nicht on Wed, 09 May 2007 19:48:50 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem:<br />
Ich habe die Klasse Object (siehe unten). Wenn ich jetzt einen Vector vom Typ Object erstelle (std::vector&lt;Object&gt; objekte) und mir von jedem objekt die Werte per Print() ausgeben lasse, bekomme ich für &quot;foo&quot; (siehe unten) die korrekte (jedes mal eine andere) Ausgabe, jedoch ist der Inhalt von &quot;zahlen&quot; immer gleich.</p>
<p>Es ist vielleicht schwer zu verstehen, was ich damit sagen will, deshalb hier der Quelltext:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;conio.h&gt;

int n;    // zählvariable, um verschiedene Werte zu erhalten

class Object
{
public:
	void Load(int f);    // 'zahlen' mit Werten füllen
	std::vector&lt;int&gt; zahlen;  // vector in dem 10 verschiedene zahlen gespeichert werden
	void Print();     // 'foo' und 'zahlen' ausgeben
	int foo;
};

void Object::Load(int f)
{
	foo = f;
	for(int i = 0; i &lt; 10; i++)
	{
		zahlen.push_back(n);
		n++;
	}
}

void Object::Print()
{
	printf(&quot;foo: %i\n&quot;, foo);   // hier sieht man, dass wirklich mehrere Instanzen von 'Object' erzeugt und in 'objekte' gespeichert wurden, denn es wird immer ein anderer Wert ausgegeben

	for(int i = 0; i &lt; 10; i++)
	{
		printf(&quot;%i\n&quot;, zahlen[i]);  // 'zahlen' ausgeben: hier sollten eigentlich bei jeder Instanz von Object andere Werte ausgegeben werden. Ist aber nicht der Fall. Ausgabe lautet immer 0,1,2,...,9
	}
}

int main()
{
	n = 0;
	std::vector&lt;Object&gt; objekte;

	Object *object = new Object();
	for(int i = 0; i &lt; 10; i++)   // 10 Objekte erstellen und in 'objekte' speichern
	{
		object-&gt;Load(i);
		objekte.push_back(*object);
	}

	for(int i = 0; i &lt; 10; i++)  // bei allen 10 objekten die Print()-Funktion ausführen
	{
		objekte[i].Print();
	}

    getch();
}
</code></pre>
<p>Wenn ich jetzt einen Vector vom Typ Object erstelle und mir von jedem objekt die Werte per Print() ausgeben lasse, bekomme ich für &quot;foo&quot; die korrekte (jedes mal eine andere) Ausgabe, jedoch ist der Inhalt von &quot;zahlen&quot; immer gleich.<br />
Kann das so überhaupt funktionieren? Wie kann ich es richtig machen. Also Ziel des ganzen ist, dass am Ende die Werte ausgegeben werden, die bei Load() eingefügt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281945</guid><dc:creator><![CDATA[Mr. Vector^^]]></dc:creator><pubDate>Wed, 09 May 2007 19:48:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vector in Vector geht nicht on Wed, 09 May 2007 20:05:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main()
{
    std::vector&lt;Object&gt; objekte;

    for (std::size_t i = 0; i &lt; 10; ++i)
    {
        Object object;
        object.load(i);
        objekte.push_back(object);
    }

    for (std::size_t i = 0; i &lt; objekte.size(); ++i) 
        objekte[i].print();
}
</code></pre>
<p>?!</p>
<p>aja</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;iostream&gt;

class Object
{
public:
    void load(const std::size_t&amp;);
    void print() const;

private:
    std::vector&lt;unsigned int&gt; m_digits;
    std::size_t m_foo;
};

void Object::load(const std::size_t&amp; foo)
{
    m_foo = foo;
    for (std::size_t i = 0; i &lt; 10; ++i)
        m_digites.push_back(i);
}

void Object::print() const
{
    std::cout &lt;&lt; m_foo &lt;&lt; std::endl;
    for (std::size_t i = 0; i &lt; m_digits.size(); ++i)
        std::cout &lt;&lt; m_digits[i] &lt;&lt; std::endl;
}
</code></pre>
<p>Das mit deinem n musse anderes machen ... ne schlechte Idee <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/1281959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281959</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 09 May 2007 20:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to Vector in Vector geht nicht on Wed, 09 May 2007 20:06:41 GMT]]></title><description><![CDATA[<p>Danke, das funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281966</guid><dc:creator><![CDATA[Mr. Vector^^]]></dc:creator><pubDate>Wed, 09 May 2007 20:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vector in Vector geht nicht on Wed, 09 May 2007 20:08:58 GMT]]></title><description><![CDATA[<p>Das Programm war ja auch nicht das, was ich verwende, sondern nur ein minimales Beispiel, in dem zwei Vektoren verschachtelt sind. Das n war auf jeden Fall ne schlechte Idee^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281968</guid><dc:creator><![CDATA[Mr. Vector^^]]></dc:creator><pubDate>Wed, 09 May 2007 20:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to Vector in Vector geht nicht on Thu, 10 May 2007 08:42:07 GMT]]></title><description><![CDATA[<p>und wenn du Object jetzt noch einen Konstruktor gibst, der ein size_t übernimmt und intern load ausführt, kannst du das so schreiben</p>
<pre><code class="language-cpp">int main()
{
    std::vector&lt;Object&gt; objekte;

    for (std::size_t i = 0; i &lt; 10; ++i)
    {
        objekte.push_back(Object(i));
    }

    for (std::size_t i = 0; i &lt; objekte.size(); ++i)
        objekte[i].print();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1282181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282181</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 10 May 2007 08:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to Vector in Vector geht nicht on Thu, 10 May 2007 09:55:21 GMT]]></title><description><![CDATA[<p>Dir ist hoffentlich klar, daß du dort ein Objekt hast das in jedem Durchlauf der Schleife neue Werte anhängt - beim push_back wird dieses Objekt kopiert, aber das globale Objekt bleibt als solches erhalten und verlängert jedes Mal seinen Vector 'zahlen'. Verwende mal ein 'for(int i = 0; i &lt; <strong>zahlen.size()</strong>; i++)' in der Print()-Methode, dann erkennst du die Unterschiede <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/1282236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282236</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 10 May 2007 09:55:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vector in Vector geht nicht on Thu, 10 May 2007 10:04:43 GMT]]></title><description><![CDATA[<p>Du meinst damit Mr. Vector^^s Variante denke ich. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1282243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282243</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 10 May 2007 10:04:43 GMT</pubDate></item></channel></rss>