005
08.05.2006, 13:50 Uhr
Th
|
Für Array-Initialisierungen nutze ich immer eine der beiden folgenden Funktions-Templates:
C++: |
template<typename AT, typename T> void init_array(AT array[], int N, const T& t) { for(int i=0; i<N; i++) array[i] = t; }
template<typename AT, typename T> void init_array(AT &array, const T& t) { const int N = sizeof(array) / sizeof(T); for(int i=0; i<N; i++) ((T*)&array)[i] = t; }
|
memset ist nur wirklich sinnvoll bei 0 oder 0xFF (-1), denn bei z.B.
C++: |
memset(b, 2*sizeof(int), 1)
|
wird nämlich jedes Byte auf 1 gesetzt, d.h. ein int hätte dann den Wert 0x01010101.
Aufgerufen würden die Templates dann mit
C++: |
const int nInitValue = 42; init_array(b, 2, nInitValue); // nur eines der beiden muß aufgerufen werden init_array(b, nInitValue); // bei statischen Arrays kannst du diese Funktion aufrufen, da sie die Größe des Arrays automatisch ermittelt (vom Compiler)
|
|