<?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[Über 2-Dimensionale Arrays iterieren]]></title><description><![CDATA[<p>Ich möchte Iteratoren für ein 2-Dimensionales Array benutzen.</p>
<pre><code>int a[12][34];
fill(begin(a), end(a), 0); //klappt nicht weil begin(a) ein array is
fill(begin(*begin(a)), end(*rbegin(a)), 0); //sehr umständlich und rbegin gibts erst ab C++14
fill(&amp;a[0][0], &amp;a[11][34], 0); //will ich vermeiden
fill(&amp;a[0][0], &amp;a[0][0] + sizeof a, 0); //meh
</code></pre>
<p>Es gibt dafür bestimmt eine ganz einfache und schöne Lösung, ich komm nur nicht drauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326669/über-2-dimensionale-arrays-iterieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 14:10:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326669.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Jun 2014 09:55:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Über 2-Dimensionale Arrays iterieren on Mon, 30 Jun 2014 09:55:54 GMT]]></title><description><![CDATA[<p>Ich möchte Iteratoren für ein 2-Dimensionales Array benutzen.</p>
<pre><code>int a[12][34];
fill(begin(a), end(a), 0); //klappt nicht weil begin(a) ein array is
fill(begin(*begin(a)), end(*rbegin(a)), 0); //sehr umständlich und rbegin gibts erst ab C++14
fill(&amp;a[0][0], &amp;a[11][34], 0); //will ich vermeiden
fill(&amp;a[0][0], &amp;a[0][0] + sizeof a, 0); //meh
</code></pre>
<p>Es gibt dafür bestimmt eine ganz einfache und schöne Lösung, ich komm nur nicht drauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406289</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 30 Jun 2014 09:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to Über 2-Dimensionale Arrays iterieren on Mon, 30 Jun 2014 10:05:34 GMT]]></title><description><![CDATA[<p>Also die rustikale Lösung wäre einfach</p>
<pre><code>int a[12][34]{};
</code></pre>
<p>Edit:</p>
<pre><code>fill(&amp;a[0][0], &amp;a[0][0] + sizeof a, 0); //meh
</code></pre>
<p>ISt das nicht sowieso falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406291</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 30 Jun 2014 10:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Über 2-Dimensionale Arrays iterieren on Mon, 30 Jun 2014 10:10:40 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Also die rustikale Lösung wäre einfach</p>
<pre><code>int a[12][34]{};
</code></pre>
<p>Edit:</p>
<pre><code>fill(&amp;a[0][0], &amp;a[0][0] + sizeof a, 0); //meh
</code></pre>
<p>ISt das nicht sowieso falsch?</p>
</blockquote>
<p>Per {} initialisieren reicht nicht, da auch sowas wie find_if funktionieren soll.</p>
<pre><code>fill(&amp;a[0][0], &amp;a[0][0] + sizeof a / sizeof **a, 0); //meh
</code></pre>
<p>Jetzt könnte es stimmen, aber schön ist es trotzdem nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406294</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 30 Jun 2014 10:10:40 GMT</pubDate></item><item><title><![CDATA[Reply to Über 2-Dimensionale Arrays iterieren on Mon, 30 Jun 2014 10:28:01 GMT]]></title><description><![CDATA[<p>wie wäre es mit</p>
<pre><code class="language-cpp">fill(&amp;**begin(a), &amp;**end(a), 0);
</code></pre>
<p>Ansonsten könntest du einfach ein decayed_begin und decayed_end selbst schreiben.<br />
etwa so</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
constexpr auto decayed_begin(T&amp;&amp; c) -&gt; decltype(std::begin(std::forward&lt;T&gt;(c)))
{ return std::begin(std::forward&lt;T&gt;(c)); }

template &lt;typename T, std::size_t M, size_t N&gt;
constexpr auto decayed_begin(T(&amp;&amp;c)[M][N]) -&gt; decltype(decayed_begin(*c))
{ return decayed_begin(*c); }

template &lt;typename T&gt;
constexpr auto decayed_end(T&amp;&amp; c) -&gt; decltype(std::end(std::forward&lt;T&gt;(c)))
{ return std::end(std::forward&lt;T&gt;(c)); }

template &lt;typename T, std::size_t M, size_t N&gt;
constexpr auto decayed_end(T(&amp;&amp;c)[M][N]) -&gt; decltype(decayed_begin(c[M]))
{ return decayed_begin(c[M]); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406297</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 30 Jun 2014 10:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to Über 2-Dimensionale Arrays iterieren on Mon, 30 Jun 2014 10:49:39 GMT]]></title><description><![CDATA[<p>Hab mal was gebastelt, unsicher ob das komplett richtig ist:</p>
<pre><code>template&lt;class T, std::size_t n, typename std::enable_if&lt;std::is_array&lt;T&gt;::value, int&gt;::type = 0&gt;
typename std::remove_all_extents&lt;T&gt;::type* RecBegin(T(&amp;Array)[n])
{
	return RecBegin(Array[0]);
}
template&lt;class T, std::size_t n, typename std::enable_if&lt;!std::is_array&lt;T&gt;::value, int&gt;::type = 0&gt;
T* RecBegin(T(&amp;Array)[n])
{
	return &amp;Array[0];
}

template&lt;class T, std::size_t n, typename std::enable_if&lt;std::is_array&lt;T&gt;::value, int&gt;::type = 0&gt;
typename std::remove_all_extents&lt;T&gt;::type* RecEnd(T(&amp;Array)[n])
{
	return RecEnd(Array[n]);
}
template&lt;class T, std::size_t n, typename std::enable_if&lt;!std::is_array&lt;T&gt;::value, int&gt;::type = 0&gt;
T* RecEnd(T(&amp;Array)[n])
{
	return &amp;Array[n];
}
</code></pre>
<p>Edit:<br />
Das war unnötig kompliziert. Hier eine einfachere Version:</p>
<pre><code>template&lt;typename T&gt;
T* RecBegin(T&amp; Object)
{
	return &amp;Object;
}
template&lt;typename T, std::size_t n&gt;
typename std::remove_all_extents&lt;T&gt;::type* RecBegin(T(&amp;Array)[n])
{
	return RecBegin(Array[0]);
}

template&lt;typename T&gt;
T* RecEnd(T&amp; Object)
{
	return &amp;Object;
}
template&lt;typename T, std::size_t n&gt;
typename std::remove_all_extents&lt;T&gt;::type* RecEnd(T(&amp;Array)[n])
{
	return RecBegin(Array[n]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406298</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 30 Jun 2014 10:49:39 GMT</pubDate></item></channel></rss>