<?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[statisches Array mit &amp;gt;1000 Elementen initialisieren]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Bisher habe ich mir nach folgendem Schema beholfen:</p>
<pre><code class="language-cpp">/*
 * C.h
 */

#ifndef IARRAY_H_
#define IARRAY_H_

class C
{
public:
	C();
	virtual ~C();
	const static int *array;
private:
	static const int *initArray();
};

#endif /* C_H_ */
</code></pre>
<pre><code class="language-cpp">/*
 * C.cpp
 */

#include &quot;C.h&quot;

C::C()
{
	// TODO Auto-generated constructor stub

}

C::~C()
{
	// TODO Auto-generated destructor stub
}

const int* C::initArray(){
	int* tmp = new int[1000];
	for (int i=0;i&lt;1000;i++){
		tmp[i] = tolleFunktion(i);
	}
	return tmp;
}

const int* C::array = initArray();
</code></pre>
<p>Gibt es da keine elegantere Lösung? Mir missfällt der Gedanke, dass dieses statische Array auf dem Heap liegt. Da der Datentyp kompliziert und das Array beliebig groß sein kann/will ich es nicht auf die übliche Weise im Quellcode initialisieren.</p>
<p>Viele Grüße</p>
<p>Wandfliese</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248201/statisches-array-mit-gt-1000-elementen-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 03:33:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248201.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Aug 2009 23:19:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Thu, 20 Aug 2009 23:19:19 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Bisher habe ich mir nach folgendem Schema beholfen:</p>
<pre><code class="language-cpp">/*
 * C.h
 */

#ifndef IARRAY_H_
#define IARRAY_H_

class C
{
public:
	C();
	virtual ~C();
	const static int *array;
private:
	static const int *initArray();
};

#endif /* C_H_ */
</code></pre>
<pre><code class="language-cpp">/*
 * C.cpp
 */

#include &quot;C.h&quot;

C::C()
{
	// TODO Auto-generated constructor stub

}

C::~C()
{
	// TODO Auto-generated destructor stub
}

const int* C::initArray(){
	int* tmp = new int[1000];
	for (int i=0;i&lt;1000;i++){
		tmp[i] = tolleFunktion(i);
	}
	return tmp;
}

const int* C::array = initArray();
</code></pre>
<p>Gibt es da keine elegantere Lösung? Mir missfällt der Gedanke, dass dieses statische Array auf dem Heap liegt. Da der Datentyp kompliziert und das Array beliebig groß sein kann/will ich es nicht auf die übliche Weise im Quellcode initialisieren.</p>
<p>Viele Grüße</p>
<p>Wandfliese</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764386</guid><dc:creator><![CDATA[Wandfliese]]></dc:creator><pubDate>Thu, 20 Aug 2009 23:19:19 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Thu, 20 Aug 2009 23:56:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Mir missfällt der Gedanke, dass dieses statische Array auf dem Heap liegt</p>
</blockquote>
<p>Wo soll es dann liegen?!</p>
<p>Wo ist genau dein Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764387</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 20 Aug 2009 23:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 00:11:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">const int* C::initArray(){ 
    static int tmp[1000]; 
    for (int i=0;i&lt;1000;i++){ 
        tmp[i] = tolleFunktion(i); 
    } 
    return tmp; 
}
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764388</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 21 Aug 2009 00:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:01:18 GMT]]></title><description><![CDATA[<p>Warum versuchst du überhaupt statische Sachen mit new zu allokieren? Das macht doch nur unnötigen Programmieraufwand und unnötige Pointerdereferenzierungen zur Laufzeit.</p>
<p>edit: Ahh, ich sehe, du willst es so zurückgeben. Merkwürdige Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764393</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:01:18 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:07:06 GMT]]></title><description><![CDATA[<p>Für so viele Elemente ist Heap doch supi. Wo ist dein Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764399</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:07:06 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:07:23 GMT]]></title><description><![CDATA[<p>Für so viele Elemente ist Heap doch supi. Wo ist dein Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764400</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:07:23 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:13:35 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Für so viele Elemente ist Heap doch supi. Wo ist dein Problem?</p>
</blockquote>
<p>Ich hatte halt noch nie Probleme, dass mir der Stack übergelaufen ist. Bin zu verwöhnt...</p>
<p>edit: Und nochwas zum Thema<br />
Wenn ich so schön runde, groß wirkende Zahlen, die fest im Quellcode eingebaut sind, sehe, dann beschleicht mich immer der Verdacht, dass da auf gut Glück Elemente reserviert werden, weil der Programmierer nicht weiß, wie es dynamisch geht und einfach mal &quot;1000 Elemente sind genug für jeden, für alle Zeiten&quot; sagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764401</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:13:35 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:14:33 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Warum versuchst du überhaupt statische Sachen mit new zu allokieren? Das macht doch nur [...] unnötige Pointerdereferenzierungen zur Laufzeit.</p>
</blockquote>
<p>Wirklich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764402</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:23:04 GMT]]></title><description><![CDATA[<p>Ich finde es einfach unästhetisch, dass statische Elemente erst allokiert werden müssen. Bei meiner Lösung ist auch nicht das Array sondern nur der Zeiger statisch. Diese Methode funktioniert zwar aber ist irgendwie total unbefriedigend. In C++ muss es doch einen eleganteren Weg geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764406</guid><dc:creator><![CDATA[Wandfliese]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:38:45 GMT]]></title><description><![CDATA[<p>Wandfliese schrieb:</p>
<blockquote>
<p>Ich finde es einfach unästhetisch, dass statische Elemente erst allokiert werden müssen. Bei meiner Lösung ist auch nicht das Array sondern nur der Zeiger statisch. Diese Methode funktioniert zwar aber ist irgendwie total unbefriedigend. In C++ muss es doch einen eleganteren Weg geben.</p>
</blockquote>
<p>Also ich finde das total klasse. Und ich weiß nicht, was nun daran unästetisch ist. Gibt es irgendwas, wo es zu langsam, zu speicherfressend, zu unübersichtluch, zu unsicher, zu wartungsunfreundlich oder sowas ist?<br />
<a href="http://www.linuxhilfen.org/c/c_aufsteiger_rot.html" rel="nofollow">http://www.linuxhilfen.org/c/c_aufsteiger_rot.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764408</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:38:45 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:38:51 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Für so viele Elemente ist Heap doch supi. Wo ist dein Problem?</p>
</blockquote>
<p>Ich hatte halt noch nie Probleme, dass mir der Stack übergelaufen ist. Bin zu verwöhnt...</p>
<p>edit: Und nochwas zum Thema<br />
Wenn ich so schön runde, groß wirkende Zahlen, die fest im Quellcode eingebaut sind, sehe, dann beschleicht mich immer der Verdacht, dass da auf gut Glück Elemente reserviert werden, weil der Programmierer nicht weiß, wie es dynamisch geht und einfach mal &quot;1000 Elemente sind genug für jeden, für alle Zeiten&quot; sagt.</p>
</blockquote>
<p>Das war wie gesagt nur ein Beispiel. Die Größe des Arrays soll zur Laufzeit nicht verändert werden. Das Array selbst soll vorberechnete Funktionswerte enthalten. Um genau zu sein Binomialkoeffzienten. Aber diese Zusatzinformation soll euch nicht dazu verleiten mit Algorithmen zur schnellen Berechnung von Binomialkoeffzienten anzudrehen. Das habe ich schon ausführlich getestet und das nachschlagen im Speicher war schneller <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/1764409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764409</guid><dc:creator><![CDATA[Wandfliese]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:47:35 GMT]]></title><description><![CDATA[<p>Wandfliese schrieb:</p>
<blockquote>
<p>Das Array selbst soll vorberechnete Funktionswerte enthalten. Um genau zu sein Binomialkoeffzienten. Aber diese Zusatzinformation soll euch nicht dazu verleiten mit Algorithmen zur schnellen Berechnung von Binomialkoeffzienten anzudrehen.</p>
</blockquote>
<p>Hätte aber gehelft, zu verstehen, was Du suchst.<br />
Du willst also sagen wir mal ein zweidimensionales Array mit 1625x1625 Einträgen basteln, um fast alle Funktionswerte nachschauen zu können. Und das Erstellen soll nicht zur Laufzeit geschehen, weil die Sekunde Rechenzeit doof ist.<br />
Tja, da kann ich Dich beruhigen: Zur Comilezeit gehts nicht nur mit C++.<br />
Was gerne gemacht wird, ist ein Miniprogramm zu bauen, was die Datei tabelle.h schreibt und die inkludiertst Du in deinem Projekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764415</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 15:47:15 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Warum versuchst du überhaupt statische Sachen mit new zu allokieren? Das macht doch nur [...] unnötige Pointerdereferenzierungen zur Laufzeit.</p>
</blockquote>
<p>Wirklich?</p>
</blockquote>
<p>Ok, schlechtes Beispiel, da der Threadersteller ein Array angelegt hat - da macht es natürlich keinen Unterschied. Habe aber auch schon einmal sowas in der Art gesehen:</p>
<pre><code class="language-cpp">int *i const = new int;  // Da stand zwar kein const, aber i wurde so verwendet, als ob.
</code></pre>
<p>Der Programmierer, dachte, das wäre so &quot;professioneller&quot;.</p>
<p>Entschuldigung, ist etwas weit weg vom Thema, dieser Beitrag.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764416</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 21 Aug 2009 15:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 16:18:49 GMT]]></title><description><![CDATA[<p>Hmm, wenn du schon zur Compilezeit die Größe kennst wie wäre es denn dann mit:</p>
<pre><code class="language-cpp">static std::tr1::array&lt;T,1000&gt;
//oder c++0x
static std::array&lt;T,1000&gt;
</code></pre>
<p>Das Array könntest du dann doch im Kontruktor deiner Klasse befüllen.<br />
Dazu biete std::array ja entsprechende Kontruktoren oder die fill()-Methode an.<br />
Oder übersehe ich da was?</p>
<p>Gruß Gate</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764428</guid><dc:creator><![CDATA[Gate]]></dc:creator><pubDate>Fri, 21 Aug 2009 16:18:49 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 16:22:28 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Wandfliese schrieb:</p>
<blockquote>
<p>Ich finde es einfach unästhetisch, dass statische Elemente erst allokiert werden müssen. Bei meiner Lösung ist auch nicht das Array sondern nur der Zeiger statisch. Diese Methode funktioniert zwar aber ist irgendwie total unbefriedigend. In C++ muss es doch einen eleganteren Weg geben.</p>
</blockquote>
<p>Also ich finde das total klasse. Und ich weiß nicht, was nun daran unästetisch ist. Gibt es irgendwas, wo es zu langsam, zu speicherfressend, zu unübersichtluch, zu unsicher, zu wartungsunfreundlich oder sowas ist?<br />
<a href="http://www.linuxhilfen.org/c/c_aufsteiger_rot.html" rel="nofollow">http://www.linuxhilfen.org/c/c_aufsteiger_rot.html</a></p>
</blockquote>
<p>Das hat alle meine Skrupel über Bord geworfen. Danke! <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="🙂"
    /><br />
Anfangs wollte ich auch ein Perl-Skript zu schreiben, dass mir die Header-Datei erstellt aber diese wäre schnell mehrere MB groß geworden.</p>
<p>Auf die eine Sekunde Rechenzeit beim Programmstart kam es mir auch gar nicht an. Ich wollte nur wissen wie ich ein statisches Array initialisieren kann ohne alle Werte in der Header-Datei anzugeben.</p>
<p>Es ist zwar überaus anmaßend als Unregistrierter und Normalsterblicher vorzuschlagen basierend auf diesen Thread einen Eintrag im FAQ zu erstellen aber ich denke das ist eine oft wiederkehrende Frage in diesem Forum <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>
<p>Beste Grüße</p>
<p>Wandfliese</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764429</guid><dc:creator><![CDATA[Wandfliese]]></dc:creator><pubDate>Fri, 21 Aug 2009 16:22:28 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 17:18:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class C
{
public:
	C()
	{
		static int *a = 0;

		if (!a) {
			a = new int[1000];
			for (int i = 0; i &lt; 1000; i++)
				a[i] = tolleFunktion(i);
		}
		array = a;
	}
// Destruktor und Reference-Counter fehlen halt.
	int operator[](int i) const
	{
		return array[i];
	}
private:
	int *array;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1764465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764465</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Fri, 21 Aug 2009 17:18:33 GMT</pubDate></item><item><title><![CDATA[Reply to statisches Array mit &amp;gt;1000 Elementen initialisieren on Fri, 21 Aug 2009 17:44:11 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ich hatte halt noch nie Probleme, dass mir der Stack übergelaufen ist. Bin zu verwöhnt...</p>
</blockquote>
<p>Der Stack kommt hier sowieso nicht in Frage. :p</p>
<p>Man sollte außerdem darauf achten, dass man die verschiedenen Bedeutungen von &quot;static&quot; nicht durcheinander bringt. Am besten &quot;static&quot; nicht auf Namensraum-Ebene verwenden, weil's dort die Bindung und nicht die Lebenszeit beeinflusst. Dafür gibt's dann ja anonyme Namensräume.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1764474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1764474</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 21 Aug 2009 17:44:11 GMT</pubDate></item></channel></rss>