<?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[Iteratoren für (C-Style) Array generieren]]></title><description><![CDATA[<p>Hi,</p>
<p>gibt es eine Möglichkeit für einen &quot;einfachen&quot; Array Iteratoren zu generieren? Ich möchte die Daten aber nicht kopieren. Es geht darum für bestimmte Bereiche eines Arrays einen begin() und end() Iterator zu generieren.</p>
<pre><code>int* array = new int [10];
auto beg = std::begin(array, 5);
auto end = std::end(array, 8);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/331492/iteratoren-für-c-style-array-generieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 15:47:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331492.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Mar 2015 18:30:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 18:30:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>gibt es eine Möglichkeit für einen &quot;einfachen&quot; Array Iteratoren zu generieren? Ich möchte die Daten aber nicht kopieren. Es geht darum für bestimmte Bereiche eines Arrays einen begin() und end() Iterator zu generieren.</p>
<pre><code>int* array = new int [10];
auto beg = std::begin(array, 5);
auto end = std::end(array, 8);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2445086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445086</guid><dc:creator><![CDATA[c++neuu]]></dc:creator><pubDate>Tue, 03 Mar 2015 18:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 18:33:57 GMT]]></title><description><![CDATA[<p>1. Du willst keine dynamischen C-Arrays.<br />
2. Es gibt nicht &quot;End-Iteratoren&quot; und &quot;Start-Iteratoren&quot;, es sind alles einfach nur Iteratoren. Also std::begin(array)+5 für das 5. Element und std::begin(array)+9 für das Ende des Bereichs 5-8.<br />
3. Du willst wirklich kein new verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445087</guid><dc:creator><![CDATA[endl-iter]]></dc:creator><pubDate>Tue, 03 Mar 2015 18:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 18:47:20 GMT]]></title><description><![CDATA[<p>endl-iter schrieb:</p>
<blockquote>
<p>1. Du willst keine dynamischen C-Arrays.</p>
</blockquote>
<p>Möchte ich auch nicht, aber die verwendete Bibliothek.</p>
<p>endl-iter schrieb:</p>
<blockquote>
<p>2. Es gibt nicht &quot;End-Iteratoren&quot; und &quot;Start-Iteratoren&quot;, es sind alles einfach nur Iteratoren. Also std::begin(array)+5 für das 5. Element und std::begin(array)+9 für das Ende des Bereichs 5-8.</p>
</blockquote>
<p>Den Ansatz hatte ich auch, aber std::begin mag die einfachen Arrays nicht.</p>
<pre><code>/usr/include/c++/4.9.2/bits/range_access.h:48:5: error: request for member 'begin' in '__cont', which is of non-class type 'int*'
</code></pre>
<p>endl-iter schrieb:</p>
<blockquote>
<p>3. Du willst wirklich kein new verwenden.</p>
</blockquote>
<p>Siehe 1 <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/2445088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445088</guid><dc:creator><![CDATA[c++neuu]]></dc:creator><pubDate>Tue, 03 Mar 2015 18:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 18:51:36 GMT]]></title><description><![CDATA[<p>Tschuldigung, Denkfehler meierseits. begin ist gar nicht nötig, Pointer sind Iteratoren.</p>
<pre><code class="language-cpp">int* array = new int [10];
auto beg = array + 5;
auto end = array + 8;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2445089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445089</guid><dc:creator><![CDATA[endl-iter]]></dc:creator><pubDate>Tue, 03 Mar 2015 18:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 18:52:30 GMT]]></title><description><![CDATA[<p>c++neuu schrieb:</p>
<blockquote>
<p>endl-iter schrieb:</p>
<blockquote>
<p>1. Du willst keine dynamischen C-Arrays.</p>
</blockquote>
<p>Möchte ich auch nicht, aber die verwendete Bibliothek.</p>
</blockquote>
<p>Gib mehr Infos: welche Bibliothek? Für was? Was macht die mit dem Speicher? Geht auch ein vector oder deleted die denn selber?</p>
<blockquote>
<p>endl-iter schrieb:</p>
<blockquote>
<p>2. Es gibt nicht &quot;End-Iteratoren&quot; und &quot;Start-Iteratoren&quot;, es sind alles einfach nur Iteratoren. Also std::begin(array)+5 für das 5. Element und std::begin(array)+9 für das Ende des Bereichs 5-8.</p>
</blockquote>
<p>Den Ansatz hatte ich auch, aber std::begin mag die einfachen Arrays nicht.</p>
<pre><code>/usr/include/c++/4.9.2/bits/range_access.h:48:5: error: request for member 'begin' in '__cont', which is of non-class type 'int*'
</code></pre>
</blockquote>
<p>Das ist ja auch kein Array, das ist ein Zeiger auf einen Speicherbereich, der groß genug ist für 10 Elemente. std::begin/end gibts dafür nicht. Ein Iterator ist nichts anderes als dieser Zeiger, begin ist der Zeiger selber, end Zeiger + size, das i-te Element Zeiger + i.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445090</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 03 Mar 2015 18:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 18:53:52 GMT]]></title><description><![CDATA[<p>Vielen Dank, manchmal macht man sich selber das Leben schwer ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>endl-iter schrieb:</p>
<blockquote>
<p>Tschuldigung, Denkfehler meierseits. begin ist gar nicht nötig, Pointer sind Iteratoren.</p>
<pre><code class="language-cpp">int* array = new int [10];
auto beg = array + 5;
auto end = array + 8;
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2445091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445091</guid><dc:creator><![CDATA[c++neuu]]></dc:creator><pubDate>Tue, 03 Mar 2015 18:53:52 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 19:15:28 GMT]]></title><description><![CDATA[<p>c++neuu schrieb:</p>
<blockquote>
<p>Vielen Dank, manchmal macht man sich selber das Leben schwer ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<p>Zum Beispiel mit unnötigem new.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445092</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 03 Mar 2015 19:15:28 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 21:42:43 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>c++neuu schrieb:</p>
<blockquote>
<p>Vielen Dank, manchmal macht man sich selber das Leben schwer ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<p>Zum Beispiel mit unnötigem new.</p>
</blockquote>
<p>Jetzt muss ich doch mein bisschen Restehre verteidigen <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="😉"
    /> Es ging darum, dass ich eine alte C-Bibliothek verwenden muss, welche sehr viele Daten (ca. 1 Gig) läd und man diese dann über Zeiger verwenden kann. Ist leider relativ viel mit Offset rumgerechne. Ich hatte jetzt einfach einen Wrapper dafür geschrieben, sodass man einfach begin() und end() für die einzelnen Bereiche verwenden kann, ohne dass die Daten einmal in mehrere std::vector Instanzen kopiert werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445121</guid><dc:creator><![CDATA[c++neuu]]></dc:creator><pubDate>Tue, 03 Mar 2015 21:42:43 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Tue, 03 Mar 2015 21:53:43 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht, wo hier ein new einen Unterschied zu einem vector machen sollte. Meinst du die einmalige Initialisierung am Anfang? Und wenn schon new, dann mit einem Smartpointer.</p>
<p>Bloß weil eine API einen Pointer will, heißt das in keinster Weise, dass man selber Pointer zur Verwaltung der Daten verwenden muss oder gar sollte. Man muss die Daten bloß auf eine Art und Weise verwalten, die einem erlaubt, später einen Pointer darauf herzustellen. Also so wie (unter anderem) vector.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445130</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 03 Mar 2015 21:53:43 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Wed, 04 Mar 2015 09:54:11 GMT]]></title><description><![CDATA[<pre><code>void oldCStyleFunction(int * buf, int maxlen);

int main()
{
	std::vector&lt;int&gt; v(255, 0);
	oldCStyleFunction(v.data(), v.size());

	std::string s = &quot;abcd&quot;;
	strlen(s.c_str());
}
</code></pre>
<p>Solche Geschichten gehen ja immer noch. Eventuell mit etwas (const weg-) gecaste, aber so kannst du immer noch alte C Bibliotheken nutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445189</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 04 Mar 2015 09:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Wed, 04 Mar 2015 16:45:52 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<pre><code>void oldCStyleFunction(int * buf, int maxlen);

int main()
{
	std::vector&lt;int&gt; v(255, 0);
	oldCStyleFunction(v.data(), v.size());
	
	std::string s = &quot;abcd&quot;;
	strlen(s.c_str());
}
</code></pre>
<p>Solche Geschichten gehen ja immer noch. Eventuell mit etwas (const weg-) gecaste, aber so kannst du immer noch alte C Bibliotheken nutzen.</p>
</blockquote>
<p>Ich meinte es genau umgekehrt. Wir haben z.B. gegeben:</p>
<pre><code>struct Foo {
    float* data;
    int* startIndices;
    int* ranges;
    int** someStuff;
}

A* load(...);
</code></pre>
<p>Die Daten wollte ich nicht in einen Vector umkopieren. Darum habe ich einen Wrapper gemacht.</p>
<pre><code>class Bar {
    float* beginRange1();
    float* endRange1();

    float* beginRange2();
    float* endRange2();
private:
    Foo* data;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2445255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445255</guid><dc:creator><![CDATA[c++neuu]]></dc:creator><pubDate>Wed, 04 Mar 2015 16:45:52 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Wed, 04 Mar 2015 16:52:29 GMT]]></title><description><![CDATA[<p>Dann zeig mal ein paar konkrete Zeilen, wie du die Bibliothek nutzt bzw. nutzen musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445258</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 04 Mar 2015 16:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Thu, 05 Mar 2015 19:31:28 GMT]]></title><description><![CDATA[<p>endl-iter schrieb:</p>
<blockquote>
<p>Tschuldigung, Denkfehler meierseits. begin ist gar nicht nötig, <strong>Pointer sind Iteratoren.</strong></p>
<pre><code class="language-cpp">int* array = new int [10];
auto beg = array + 5;
auto end = array + 8;
</code></pre>
</blockquote>
<p>Heist das ich kannwann immer eine Funktion der Standardbiliothek einen Iterator zurückgibt, diesen wie einen Pointer benutzen und umgedreht ? Oder wenn einen Funktion einen Pointer will, ihr einfach nen Iterator geben ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445520</guid><dc:creator><![CDATA[unsure]]></dc:creator><pubDate>Thu, 05 Mar 2015 19:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Thu, 05 Mar 2015 19:46:02 GMT]]></title><description><![CDATA[<p>unsure schrieb:</p>
<blockquote>
<p>endl-iter schrieb:</p>
<blockquote>
<p>Tschuldigung, Denkfehler meierseits. begin ist gar nicht nötig, <strong>Pointer sind Iteratoren.</strong></p>
<pre><code class="language-cpp">int* array = new int [10];
auto beg = array + 5;
auto end = array + 8;
</code></pre>
</blockquote>
<p>Heist das ich kannwann immer eine Funktion der Standardbiliothek einen Iterator zurückgibt, diesen wie einen Pointer benutzen und umgedreht ? Oder wenn einen Funktion einen Pointer will, ihr einfach nen Iterator geben ?</p>
</blockquote>
<p>Nein. Es gibt das Konzept eines Iterators und manche Typen erfüllen dieses Konzept.<br />
Ein Zeiger ist ein Iterator.<br />
Ein vector&lt;int&gt;::iterator ist ein Iterator.</p>
<p>Aber ein Iterator ist kein Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445522</guid><dc:creator><![CDATA[endl-iter]]></dc:creator><pubDate>Thu, 05 Mar 2015 19:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Thu, 05 Mar 2015 20:41:32 GMT]]></title><description><![CDATA[<p>Hier stand Mist. Hab mich von dem Fettgedruckten verwirren lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445527</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Thu, 05 Mar 2015 20:41:32 GMT</pubDate></item><item><title><![CDATA[Reply to Iteratoren für (C-Style) Array generieren on Fri, 06 Mar 2015 10:02:04 GMT]]></title><description><![CDATA[<p>endl-iter schrieb:</p>
<blockquote>
<p>Aber ein Iterator ist <strong>nicht notwendigerweise ein</strong> Zeiger.</p>
</blockquote>
<p>FTFY.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2445612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2445612</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 06 Mar 2015 10:02:04 GMT</pubDate></item></channel></rss>