<?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[std::array constand expression]]></title><description><![CDATA[<p>Ich programmier gerade eine Übung von <a href="http://codinggame.com" rel="nofollow">codinggame.com</a> und habe ein kleines Problem. Die Übung gibt mir über die Console die Länge und die Breit einer 2D Map an:</p>
<pre><code>int width; // the number of cells on the X axis
    cin &gt;&gt; width; cin.ignore();
    int height; // the number of cells on the Y axis
    cin &gt;&gt; height; cin.ignore();
</code></pre>
<p>Um die Aufgabe zu meistern möchte ich einen array eines arrays erstellen, der mir angibt auf welcher Position ein Node ist:</p>
<pre><code>std::array&lt; std::array&lt;bool, width&gt;, height &gt; map2d;
</code></pre>
<p>Leider verlangt der Array dass width und height constand expressions sind, aber wie soll ich das machen, wenn ich die Größe erst in der Laufzeit erfahre? Gibt es eine möglichkeit std::array trozdem zu verwenden, oder ist er dafür nicht gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334017/std-array-constand-expression</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 03:40:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334017.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Aug 2015 19:38:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::array constand expression on Sun, 16 Aug 2015 19:38:39 GMT]]></title><description><![CDATA[<p>Ich programmier gerade eine Übung von <a href="http://codinggame.com" rel="nofollow">codinggame.com</a> und habe ein kleines Problem. Die Übung gibt mir über die Console die Länge und die Breit einer 2D Map an:</p>
<pre><code>int width; // the number of cells on the X axis
    cin &gt;&gt; width; cin.ignore();
    int height; // the number of cells on the Y axis
    cin &gt;&gt; height; cin.ignore();
</code></pre>
<p>Um die Aufgabe zu meistern möchte ich einen array eines arrays erstellen, der mir angibt auf welcher Position ein Node ist:</p>
<pre><code>std::array&lt; std::array&lt;bool, width&gt;, height &gt; map2d;
</code></pre>
<p>Leider verlangt der Array dass width und height constand expressions sind, aber wie soll ich das machen, wenn ich die Größe erst in der Laufzeit erfahre? Gibt es eine möglichkeit std::array trozdem zu verwenden, oder ist er dafür nicht gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464155</guid><dc:creator><![CDATA[cppv0id]]></dc:creator><pubDate>Sun, 16 Aug 2015 19:38:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::array constand expression on Sun, 16 Aug 2015 19:52:46 GMT]]></title><description><![CDATA[<p>Nein, so kann man std::array nicht verwenden. Als Alternative empfehle ich einen std::vector mit Höhe*Breite Elementen und eigener Umrechnung von Koordinaten auf den zugehörigen Index.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464158</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Sun, 16 Aug 2015 19:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to std::array constand expression on Sun, 16 Aug 2015 20:07:55 GMT]]></title><description><![CDATA[<p>patrick246 schrieb:</p>
<blockquote>
<p>Nein, so kann man std::array nicht verwenden. Als Alternative empfehle ich einen std::vector mit Höhe*Breite Elementen und eigener Umrechnung von Koordinaten auf den zugehörigen Index.</p>
</blockquote>
<p>Das ist schade, ich dachte std::array wäre das equivalent zum carray, jenes kann man auch zur Laufzeit mit den Größenwerten initialisieren. Die Aufgabe ist für jeden Node den rechten und unteren Nachbar zu finden. Darum muss ich array[x 1, y 1] durchsuchen, ob ein Nachbar existiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464159</guid><dc:creator><![CDATA[cppv0id]]></dc:creator><pubDate>Sun, 16 Aug 2015 20:07:55 GMT</pubDate></item><item><title><![CDATA[Reply to std::array constand expression on Sun, 16 Aug 2015 20:13:38 GMT]]></title><description><![CDATA[<p>cppv0id schrieb:</p>
<blockquote>
<p>Das ist schade, ich dachte std::array wäre das equivalent zum carray, jenes kann man auch zur Laufzeit mit den Größenwerten initialisieren.</p>
</blockquote>
<p>Nein, kann man nicht. Das ist eine nicht standardkonforme Erweiterung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464162</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 16 Aug 2015 20:13:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::array constand expression on Sun, 16 Aug 2015 20:15:41 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Nein, kann man nicht. Das ist eine nicht standardkonforme Erweiterung.</p>
</blockquote>
<p>Ist tatsächlich Teil des C99 Standard und nennt sich variable-length arrays.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464164</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Sun, 16 Aug 2015 20:15:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::array constand expression on Sun, 16 Aug 2015 21:08:23 GMT]]></title><description><![CDATA[<p>sebi707 schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Nein, kann man nicht. Das ist eine nicht standardkonforme Erweiterung.</p>
</blockquote>
<p>Ist tatsächlich Teil des C99 Standard und nennt sich variable-length arrays.</p>
</blockquote>
<p>Ja, C99, C11 schon nicht mehr (optional) un in C++ waren sie nie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464178</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 16 Aug 2015 21:08:23 GMT</pubDate></item><item><title><![CDATA[Reply to std::array constand expression on Mon, 17 Aug 2015 08:38:32 GMT]]></title><description><![CDATA[<pre><code>std::vector&lt; std::vector&lt; bool &gt; &gt; map2d( height, std::vector&lt; bool &gt;( width ) );
</code></pre>
<p>wäre die Lösung mit vector. Hat sogar noch den netten Nebeneffekt, dass ungefähr nur ein bit pro bool an Speicherverbrauch anfällt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2464217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464217</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Mon, 17 Aug 2015 08:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to std::array constand expression on Mon, 17 Aug 2015 08:46:35 GMT]]></title><description><![CDATA[<p>Torsten Robitzki schrieb:</p>
<blockquote>
<pre><code>std::vector&lt; std::vector&lt; bool &gt; &gt; map2d( height, std::vector&lt; bool &gt;( width ) );
</code></pre>
<p>wäre die Lösung mit vector. Hat sogar noch den netten Nebeneffekt, dass ungefähr nur ein bit pro bool an Speicherverbrauch anfällt.</p>
</blockquote>
<p>Vorsicht, <code>vector&lt; bool &gt;</code> ist <a href="https://isocpp.org/blog/2012/11/on-vectorbool" rel="nofollow">kein Container</a>, das kann probleme machen:</p>
<pre><code>std::vector&lt; bool &gt; v = {false, false, false};
bool *b = &amp;v[0]; // Fehler, geht nicht mit vector&lt; bool &gt;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2464219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2464219</guid><dc:creator><![CDATA[vector&amp;lt;bool&amp;gt;]]></dc:creator><pubDate>Mon, 17 Aug 2015 08:46:35 GMT</pubDate></item></channel></rss>