2014-02-12 14 views

回答

2

以下可能會有所幫助:

C++ 03:

template <typename T, std::size_t N> 
void zero_array(T (&a)[N]) 
{ 
    for (std::size_t i = 0; i != N; ++i) { 
     a[i] = 0; 
    } 
} 

template <typename T, std::size_t N1, std::size_t N2> 
void zero_array(T (&a)[N1][N2]) 
{ 
    for (std::size_t i = 0; i != N1; ++i) { 
     for (std::size_t j = 0; j != N2; ++j) { 
      a[i][j] = 0; 
     } 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    int a[42]; 
    int b[42][2]; 

    zero_array(a); 
    zero_array(b); 

    return 0; 
} 

C++ 11(任何尺寸):

#include <array> 

template<typename T> 
struct zero 
{ 
    void operator() (T& t) const { t = 0; } 
}; 

template <typename T, std::size_t N> 
struct zero<std::array<T, N>> 
{ 
    void operator() (std::array<T, N> &a) const 
    { 
     zero<T> z; 
     for (auto& e : a) { 
      z(e); 
     } 
    } 
}; 

template <typename T> 
void zero_array(T &a) 
{ 
    zero<T>()(a); 
} 

int main(int argc, char *argv[]) 
{ 
    std::array<std::array<int, 42>, 2> a; 

    zero_array(a); 

    return 0; 
} 
0

事實上,這是很容易做到這一點:

C++ 11(對於任何尺寸!)

template< typename T > 
void zero_out(T &cell) 
{ 
    cell = T(); 
} 
template< size_t N, typename T > 
void zero_out(T(&array)[N]) // this function is called recursively for each array dimension 
{ 
    for (auto & cell : array) 
    { 
     zero_out(cell); 
    } 
} 

void test() 
{ 
    static int array[2][3][4][5]; 

    zero_out(array); // <--- zero out all the cells of our fourth-dimension array! 
} 

我認爲這對C++ 03也是可行的(避免使用'range-for'和'auto')。

相關問題