fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <functional>
  4. #include <random>
  5. #include <iterator>
  6. #include <type_traits>
  7.  
  8. template <typename T>
  9. void f()
  10. {
  11. if(!std::is_same<int, T>::value && !std::is_same<double, T>::value)
  12. {
  13. std::cerr << "Wrong template type" << std::endl;
  14. return ;
  15. }
  16. const std::size_t N = 2;
  17. const std::size_t M = 4;
  18. const std::size_t LEN = M * N;
  19. T arr[M][N];
  20.  
  21. std::mt19937 gen { std::random_device()() };
  22. std::uniform_real_distribution<> dist(static_cast<T>(1),static_cast<T>(9));
  23. //or if(std::is_same<int, T>::value) int_distribution else real_distribution
  24.  
  25. std::generate(&arr[0][0], &arr[0][0] + LEN, [&]{ return dist(gen); });
  26.  
  27. for(std::size_t i = 0; i < M; ++i)
  28. {
  29. for(std::size_t j = 0; j < N; ++j)
  30. std::cout << arr[i][j] << ' ';
  31. std::cout << std::endl;
  32. }
  33.  
  34. std::cout << "Mul: "
  35. << std::accumulate(&arr[0][0],&arr[0][0] + LEN,static_cast<T>(1),std::multiplies<T>())
  36. << std::endl;
  37. }
  38.  
  39. int main(int argc, char *argv[])
  40. {
  41. f<int>(); //or f<double>();
  42. }
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
2 4 
3 3 
7 8 
2 8 
Mul: 64512