fork download
  1. // implementation:
  2. #include <time.h>
  3. #include <algorithm>
  4. #include <array>
  5. #include <numeric>
  6. #include <random>
  7. #include <vector>
  8.  
  9. std::array<std::array<int, 4>, 4> make_random_array()
  10. {
  11. typedef std::vector<int>::difference_type diff_t;
  12.  
  13. std::array<std::array<int, 4>, 4> ret;
  14. std::vector<int> v(16);
  15. std::iota(v.begin(), v.end(), 0);
  16. std::mt19937 prng(static_cast<std::mt19937::result_type>(time(0)));
  17. auto shuffler = [&prng](diff_t const n)
  18. {
  19. return std::uniform_int_distribution<diff_t>(0, n + 1)(prng);
  20. };
  21. std::random_shuffle(v.begin(), v.end(), shuffler);
  22. for (decltype(v.size()) i = 0, i_end = v.size(); i != i_end; ++i)
  23. ret[i / 4][i % 4] = v[i];
  24. return ret;
  25. }
  26.  
  27. //example usage:
  28. #include <iomanip>
  29. #include <iostream>
  30.  
  31. int main()
  32. {
  33. auto const arr = make_random_array();
  34. std::for_each(
  35. arr.cbegin(), arr.cend(), [](std::array<int, 4> const& o)
  36. {
  37. std::for_each(
  38. o.cbegin(), o.cend(), [](int const i)
  39. {
  40. std::cout << std::setw(2) << i << ' ';
  41. }
  42. );
  43. std::cout << '\n';
  44. }
  45. );
  46. }
Success #stdin #stdout 0s 3060KB
stdin
Standard input is empty
stdout
12 11 14  7 
13 15  0  2 
 5  9 10  4 
 1  8  3  6