<?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[verschachtelter Vector]]></title><description><![CDATA[<p>Ich habe einen eindimensionalen vector und möchte den in einen zweidimensionalen vector &quot;konvertieren&quot;.<br />
Bei einem Array würde das ganze ja dann so aussehen:</p>
<pre><code class="language-cpp">for(int y = 0; y &lt; height; y++) {
	for(int x = 0; x &lt; width; x++) {
		array[y][x] = daten[i];
		i++;
	}
}
</code></pre>
<p>wobei daten ein Vector ist.<br />
Da ich das ganze jetzt aber dynamisch haben will, habe ich mir gedacht, dass ich einen verschachtelten vector nehme, der dann so aussieht:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt;&gt; array;
</code></pre>
<p>Jetzt weiß ich aber nicht wie ich die Daten aus dem normalen vector in den verschachtelten vector bekommt.<br />
Wenn ich jetzt z.B.</p>
<pre><code class="language-cpp">array.push_back(1)
array.push_back(2)
</code></pre>
<p>schreibe, an welcher Position steht diese zwei dann? An der Position [0][1] oder an der Positon [1][0]?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273900/verschachtelter-vector</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 21:46:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273900.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Sep 2010 09:05:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 09:05:38 GMT]]></title><description><![CDATA[<p>Ich habe einen eindimensionalen vector und möchte den in einen zweidimensionalen vector &quot;konvertieren&quot;.<br />
Bei einem Array würde das ganze ja dann so aussehen:</p>
<pre><code class="language-cpp">for(int y = 0; y &lt; height; y++) {
	for(int x = 0; x &lt; width; x++) {
		array[y][x] = daten[i];
		i++;
	}
}
</code></pre>
<p>wobei daten ein Vector ist.<br />
Da ich das ganze jetzt aber dynamisch haben will, habe ich mir gedacht, dass ich einen verschachtelten vector nehme, der dann so aussieht:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt;&gt; array;
</code></pre>
<p>Jetzt weiß ich aber nicht wie ich die Daten aus dem normalen vector in den verschachtelten vector bekommt.<br />
Wenn ich jetzt z.B.</p>
<pre><code class="language-cpp">array.push_back(1)
array.push_back(2)
</code></pre>
<p>schreibe, an welcher Position steht diese zwei dann? An der Position [0][1] oder an der Positon [1][0]?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952836</guid><dc:creator><![CDATA[Denksportler]]></dc:creator><pubDate>Wed, 15 Sep 2010 09:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 09:31:32 GMT]]></title><description><![CDATA[<p>Die beiden Aufrufe machen überhaupt nicht das, was du meinst. Die fügen nämlich jeweils 1 und 2 vectoren in <code>array</code> ein und <strong>keine</strong> Werte.<br />
siehe hier: <a href="http://www.cplusplus.com/reference/stl/vector/vector/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/vector/</a></p>
<p>Wenn du da etwas füllen willst musst du zuerst einen vector&lt;int&gt; füllen und dann den einfügen.</p>
<pre><code class="language-cpp">vector&lt;int&gt; temp;
temp.push_back (2);
temp.push_back (1);
//...
array.push_back(temp);
</code></pre>
<p>btw:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt;&gt; array;
</code></pre>
<p>ist falsch. Du musst:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt; &gt; array;
</code></pre>
<p>schreiben, ansonsten ist es nicht portabel. - Klingt komisch, ist aber (im Moment) noch so. <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/1952846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952846</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 15 Sep 2010 09:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 10:00:35 GMT]]></title><description><![CDATA[<p>Danke, jetzt habe ich es hinbekommen:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; temp;
std::vector&lt;std::vector&lt;int&gt; &gt; array;
int i = 0;
int old = 0;
for(int y = 0; y &lt; height; y++) {
	for(int x = 0; x &lt; width; x++) {
		temp.push_back(daten[i]);
		if (old != y) {
			array.push_back(temp);
			temp.clear();
		}
		old = y;
		i++;
	}
}
</code></pre>
<p>Wenn ich jetzt z.B. für height den Wert 50 habe und für width den Wert 100, müsste der größte Index des vectors [49][99] sein. Allerdings ist momentan der größte Index [48][100], was so nicht ganz stimmt.<br />
Findet jemand den Fehler, denn für mich sieht der Code eigentlich korrekt aus.</p>
<p>drakon schrieb:</p>
<blockquote>
<p>btw:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt;&gt; array;
</code></pre>
<p>ist falsch. Du musst:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt; &gt; array;
</code></pre>
<p>schreiben, ansonsten ist es nicht portabel. - Klingt komisch, ist aber (im Moment) noch so. <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>
</blockquote>
<p>Hat das auch irgendeinen Sinn, oder ist das einfach nur so eine Macke von C++? <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/1952853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952853</guid><dc:creator><![CDATA[Denksportler]]></dc:creator><pubDate>Wed, 15 Sep 2010 10:00:35 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 10:02:43 GMT]]></title><description><![CDATA[<p>Vielleicht sollte man mal ein kurzes Tutorial über 2D Arrays schreiben, das scheint ja wohl öfter benötigt zu werden. Gerade wenn es Arrays sind, bei denen alle Zeilen die gleiche Anzahl von Spalten haben drängt sich da eine eigene templatisierte Klasse mit einem internen Vektor zu Datenspeicherung auf.<br />
Ansonsten scheint boost::multi_array eine ganz gute Wahl zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952854</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 15 Sep 2010 10:02:43 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 10:05:10 GMT]]></title><description><![CDATA[<p>Denksportler schrieb:</p>
<blockquote>
<p>Hat das auch irgendeinen Sinn, oder ist das einfach nur so eine Macke von C++? <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>
</blockquote>
<p>Sinn hat das keinen, es liegt am Parser der meisten C++ Frontends. Sie interpretieren die doppelten schliessenden spitzen Klammern als Shift Operator &gt;&gt; statt der schliessenden Templatedefinition. Mit dem neuen C0x++ Standard ist das neu geregelt worden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952856</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 15 Sep 2010 10:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 10:34:21 GMT]]></title><description><![CDATA[<p>Denksportler schrieb:</p>
<blockquote>
<p>Wenn ich jetzt z.B. für height den Wert 50 habe und für width den Wert 100, müsste der größte Index des vectors [49][99] sein. Allerdings ist momentan der größte Index [48][100], was so nicht ganz stimmt.<br />
Findet jemand den Fehler, denn für mich sieht der Code eigentlich korrekt aus.</p>
</blockquote>
<p>Wenn ich das richtig sehe wird beim ersten Durchlauf das temporäre Array nicht hinzugefügt, weil old und y beide 0 sind.</p>
<p>Wenn du die Größen vorher schon alle kennst, dann kannst du aber auch die Größe der vectoren schon im Konstruktor oder mit resize, assign, fill, usw. festlegen und dann eine wesentlich einfachere Füllschleife schreiben als das was du jetzt hast. Ungefähr so (ungetestet, aber so als Idee):</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt; &gt; array;
array.assign(height, vector&lt;int&gt;(width));  // Array auf height x width dimensionieren
for(int y = 0; y &lt; height; y++)
    for(int x = 0; x &lt; width; x++)
        array[y][x] = daten[y*width + x];
</code></pre>
<p>edit: Rechen- und Rechtschreibfehler beseitigt (hoffentlich alle). Und Idee für etwas noch kürzeres:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt; &gt; array(height);
for(int y = 0; y &lt; height; y++)
   array[y] = vector&lt;int&gt;(daten+y*width, daten+(y+1)*width] );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1952867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952867</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 15 Sep 2010 10:34:21 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 10:45:06 GMT]]></title><description><![CDATA[<p>Ich wusste garnicht das der '=' Operator auch bei vector funktioniert.<br />
Das funktioniert aber nur, wenn man den vector vorher dimensioniert oder?</p>
<p>Jetzt habe ich aber noch eine andere Frage:<br />
Dieses Konstrukt:</p>
<pre><code class="language-cpp">for(int y = 0; y &lt; width; y++) {
	for(int x = 0; x &lt; height; x++) {
		if (array[y][x] != 0) {
            // do something
        }
    }
}
</code></pre>
<p>liefer mir immer folgenden Fehler beim Debuggen:</p>
<pre><code>Eine Ausnahme (erste Chance) bei 0x004309b1 in Release.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xabababab.
Unbehandelte Ausnahme bei 0x004309b1 in Release.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xabababab.
</code></pre>
<p>in der 3. Zeile. Der Debugger sagt mir aber auch, dass alle Werte in dem vector korrekt belegt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952883</guid><dc:creator><![CDATA[Denksportler]]></dc:creator><pubDate>Wed, 15 Sep 2010 10:45:06 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 11:00:04 GMT]]></title><description><![CDATA[<p>Denksportler schrieb:</p>
<blockquote>
<p>Ich wusste garnicht das der '=' Operator auch bei vector funktioniert.</p>
</blockquote>
<p>Klar. Ist schließlich C++ und nicht C mit seiner komischen Sonderbehandlung von Arrays</p>
<blockquote>
<p>Das funktioniert aber nur, wenn man den vector vorher dimensioniert oder?</p>
</blockquote>
<p>Auf der linken Seite der Zuweisung muss ein gültiges Objekt stehen. Wie bei jeder Zuweisung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1952889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1952889</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 15 Sep 2010 11:00:04 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 16:19:56 GMT]]></title><description><![CDATA[<p>Der Grund für die Exception ist der, dass in der Schleife der Wert y gar nicht zu existieren scheint. Auch nicht um Debugger. Woran liegt das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953048</guid><dc:creator><![CDATA[Denksportler]]></dc:creator><pubDate>Wed, 15 Sep 2010 16:19:56 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 17:08:19 GMT]]></title><description><![CDATA[<p>Denksportler schrieb:</p>
<blockquote>
<p>Der Grund für die Exception ist der, dass in der Schleife der Wert y gar nicht zu existieren scheint. Auch nicht um Debugger. Woran liegt das?</p>
</blockquote>
<p>Du meinst y ist nicht initialisiert? Vermutlich Tippfehler oder ähnliches. Zeig mal 1:1 die fraglichen Zeilen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953069</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 15 Sep 2010 17:08:19 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Wed, 15 Sep 2010 17:18:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for(int y = 0; y &lt; width; y++) {
	for(int x = 0; x &lt; height; x++) {
		if (array[y][x] != 0) { // wirft die exception
		}
	}
}
</code></pre>
<p>So hat es vorher auch immer Funktioniert. Der Fehler trat erst auf, als ich den vector genommen habe.<br />
Wenn y nicht initialisiert wäre, stände im Debugger ja folgendes:</p>
<pre><code>Name: y
Wert: ???
</code></pre>
<p>Aber im Debugger steht gar nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953074</guid><dc:creator><![CDATA[Denksportler]]></dc:creator><pubDate>Wed, 15 Sep 2010 17:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Thu, 16 Sep 2010 08:50:45 GMT]]></title><description><![CDATA[<p>Du hast height und width vertauscht gegenüber SeppJ seinem Beispiel. Bei dir müsste es dann so aussehen</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt; &gt; array(width, vector&lt;int&gt;(height));  // Array auf height x width dimensionieren
for(int y = 0; y &lt; width; y++)
    for(int x = 0; x &lt; height; x++)
        array[y][x] = daten[y*width + x];
</code></pre>
<p>Das assign braucht man auch nicht. Da reicht der Konstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953272</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 16 Sep 2010 08:50:45 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Thu, 16 Sep 2010 13:45:50 GMT]]></title><description><![CDATA[<p>Danke, so klappts... fast <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Am Ende der Funtkion, also wenn der vector wieder zerstört wird, kommt jetzt dieser Fehler:</p>
<pre><code>HEAP[Release.exe]: Heap block at 00374D38 modified at 00374D7C past requested size of 3c
Windows hat einen Haltepunkt in Release.exe ausgelöst.

Dies kann auf eine Beschädigung des Heaps zurückzuführen sein, die auf ein Problem in Release.exe oder in einer der geladenen DLLs hinweist.

Dies kann auch darauf zurückzuführen sein, dass der Benutzer F12 drückt, während Release.exe den Fokus hat.

Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.
</code></pre>
<p>Also F12 habe ich nicht gedrückt und ansonsten habe ich diese Fehlermeldung auch sonst nie gesehen.<br />
Mein Code sieht jetzt so aus:</p>
<pre><code class="language-cpp">int width = daten[0];
int height = daten[1];
std::vector&lt;std::vector&lt;int&gt; &gt; maparray(width, std::vector&lt;int&gt;(height));
for(int y = 0; y &lt; height; y++) {
	for(int x = 0; x &lt; width; x++) {
		maparray[y][x] = daten[y * width + x + 2];
	}
}
for(int y = 0; y &lt; width; y++) {
	for(int x = 0; x &lt; height; x++) {
		if (maparray[y][x] != 0) {
			// Daten verarbeiten
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1953397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953397</guid><dc:creator><![CDATA[Denksportler]]></dc:creator><pubDate>Thu, 16 Sep 2010 13:45:50 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Thu, 16 Sep 2010 13:49:14 GMT]]></title><description><![CDATA[<p>Fällt dir der Unterschied an beiden for-Schleifen auf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953398</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 16 Sep 2010 13:49:14 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Thu, 16 Sep 2010 13:57:47 GMT]]></title><description><![CDATA[<p>Ja, und der ist korrekt.<br />
Habs aber auch mal in allen anderen Variationen ausprobiert (auch wenns kein Sinn macht) und jedes mal der gleiche Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953403</guid><dc:creator><![CDATA[Denksportler]]></dc:creator><pubDate>Thu, 16 Sep 2010 13:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Thu, 16 Sep 2010 14:15:52 GMT]]></title><description><![CDATA[<p>Denksportler schrieb:</p>
<blockquote>
<p>Ja, und der ist korrekt.</p>
</blockquote>
<p>Für width == height stimmt die Aussage wohl, aber das dürfte ein Sonderfall sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953419</guid><dc:creator><![CDATA[nurf]]></dc:creator><pubDate>Thu, 16 Sep 2010 14:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to verschachtelter Vector on Thu, 16 Sep 2010 14:16:11 GMT]]></title><description><![CDATA[<p>Wieso ist der korrekt? Der ist nur dann korrekt, wenn dein Array quadratisch ist.<br />
Im der ersten for-Schleifen Block läufst du mit y über die Höhe und x über die Breite, legst maparray aber mit width Zeilen zu je height Spalten an. Das kann doch nicht passen.<br />
Der zweite for-Schleifen Block ist in Ordnung, denn da läufst du mit y über die Breite und mit x über die Höhe, genau so, wie die Vektordimensionen initialisiert worden sind. Ob die erste Dimension jetzt die Höhe und die zweite die Breite ist oder umgekehrt weiß ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1953420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1953420</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 16 Sep 2010 14:16:11 GMT</pubDate></item></channel></rss>