6.11.2011

C++: Initialize a multidimensional array with std::fill()

STL の std::fill() アルゴリズムによる多次元配列の初期化

こちら(http://mogproject.blogspot.com/2011/05/c-vector.html)同様、
マクロ+テンプレートで実現。

   1: #define FILL(ptr, value) FILL_((ptr), sizeof(ptr) / sizeof(value), (value))
   2: template <typename T>
   3: void FILL_(void* ptr, size_t size, T value) {
   4:   std::fill((T*)ptr, (T*)ptr + size, value);
   5: }

・使用例

   1: int a[3][3];
   2: char c[2][2][2];
   3: FILL(a, 5);
   4: FILL(c, 'X');
   5:  
   6: for (int i=0; i<3; ++i) for (int j=0; j<3; ++j)
   7:   std::cout << a[i][j] << " ";
   8: std::cout << std::endl;  // "5 5 5 5 5 5 5 5 5 "
   9: for (int i=0; i<2; ++i) for (int j=0; j<2; ++j) for(int k=0; k<2; ++k)
  10:   std::cout << c[i][j][k] << " ";
  11: std::cout << std::endl;  // "X X X X X X X X "

0 件のコメント:

コメントを投稿