array mit vordefinierten anfangswerten
-
Gibt es irgendwie die Möglichkeit z.B. ein Array int a[999999] zu erstellen, in dem jedes Feld von anfang an schon den Wert "0" z.B. enthält? Aber ohne das man ewig mit einer "for schleife" von 0-999999 hochzählen muss....dass das halt einfach so von anfang an so ist.
Weiß jemand was ich mein? Ist das möglich?MfG
Stromberg
-
Von alleine wird der Speicher nicht auf 0 gesetzt.
Aber anstatt einer Schleife kannst du auch memset() verwenden.
-
Wie genau funktioniert das mit "memset()", das geht aber schon schnelelr als mit einer Schleife?
MfG
Stromberg
-
setmem(array,array_size*sizeof(int),0);bzw.
memset(array,0,array_size*sizeof(int));Ob das aber wirklich einen merkbaren Geschwindigkeitsvorteil bringt, weiss ich nicht.
-
Stromberg schrieb:
Gibt es irgendwie die Möglichkeit z.B. ein Array int a[999999] zu erstellen, in dem jedes Feld von anfang an schon den Wert "0" z.B. enthält?
Nein (wenn dein "z.B." "z.B." meinen soll - dein Beispiel lässt sich mittels
int a[999999] = {};realisieren).Die Erläuterung zu
memsetoderfill[_n]findest du in der Doku, und ja, es ist (potentiell) schneller.
-
Und wo find ich das was über "memset" und "fill[_n]"? Hab bis jetzt nur das hier gefunden http://support.microsoft.com/kb/263606/de und des check ich net.
MfG
STromberg
-
Ehm std::memset ist aus <cstring> .... d.h. in jeder C++ Referenz

-
Und die beiden Funktionen fill() und fill_n() sind in <algorithm> deklariert (und definiert).
Wenn dein Array statisch bzw. global ist, dann wird es automatisch mit 0 initialisiert, nur bei lokalen Variablen oder dynamischen Speicher nicht.
Außerdem sollten so große Variablen besser dynamisch angelegt werden, da du sonst evtl. einen Stackoverflow erhälst (und dann mußt du aber die Arraywerte von Hand initialisieren):
const int size = 999999; int *array = new int[size]; std::fill_n(array, size, 0);
-
Stromberg schrieb:
Gibt es irgendwie die Möglichkeit z.B. ein Array int a[999999] zu erstellen, in dem jedes Feld von anfang an schon den Wert "0" z.B. enthält? Aber ohne das man ewig mit einer "for schleife" von 0-999999 hochzählen muss....dass das halt einfach so von anfang an so ist.
Weiß jemand was ich mein? Ist das möglich?int a[20] = {}; // Alle Elemente 0
-
Th schrieb:
... (und dann mußt du aber die Arraywerte von Hand initialisieren)
Oder man überlässt es new - wenn nur Initialisierung mit 0 gefordert ist:
const int size = 999999; int *array = new int[size]();
-
Stimmt, damit wird dann der Standard-Konstruktor (Default Ctr) für jedes Element aufgerufen.
Ich finde diese Syntax nur ein wenig kryptisch, besonders da man keine weiteren Parameter angeben kann. Ich hoffe, dies ändert sich dann bei C++0x...