fork(3) download
  1. #include <array>
  2. #include <initializer_list>
  3. #include <iostream>
  4. #include <iterator>
  5.  
  6. template <typename T, size_t N>
  7. struct Array
  8. {
  9. public:
  10.  
  11. Array() = default;
  12. Array(std::initializer_list<T> init) : Array(init, std::make_index_sequence<N>()) {}
  13.  
  14. auto begin() const { return std::begin(data); }
  15. auto end() const { return std::end(data); }
  16.  
  17. private:
  18. template <size_t...I>
  19. Array(std::initializer_list<T> init, std::index_sequence<I...>, T def_value = T())
  20. : data {get<I>(init, def_value)...} { }
  21.  
  22. template <size_t I>
  23. static const T& get(const std::initializer_list<T>& init, const T& def_value) {
  24. return I < init.size() ? init.begin()[I] : def_value;
  25. }
  26.  
  27. private:
  28. std::array<T,N> data;
  29. // T data[N];
  30. };
  31.  
  32. template <typename T, size_t N>
  33. std::ostream& operator << (std::ostream& output, const Array<T, N>& array)
  34. {
  35. output << "[";
  36. for (auto&& element : array)
  37. output << " " << element;
  38.  
  39. return output << " ]";
  40. }
  41.  
  42. int main()
  43. {
  44. Array<Array<int, 3>, 3> m { {0, 1}, {2, 3} };
  45. std::cout << m << std::endl;
  46. }
  47.  
  48.  
Success #stdin #stdout 0s 4444KB
stdin
Standard input is empty
stdout
[ [ 0 1 0 ] [ 2 3 0 ] [ 0 0 0 ] ]