fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. template<typename Item>
  6. class matrix
  7. {
  8. public:
  9. matrix(size_t sx, size_t sy)
  10. : _sx(sx), _sy(sy), items(nullptr)
  11. {
  12. items = new Item[sx * sy];
  13. fill(items, items + sx * sy, 0);
  14. for (size_t xy = 0; xy < min(sx, sy); xy++) (*this)(xy, xy) = 1;
  15. }
  16.  
  17. ~matrix() { delete[] items; }
  18. size_t sx() const { return _sx; }
  19. size_t sy() const { return _sy; }
  20.  
  21. const Item& operator()(size_t x, size_t y) const { return items[y * _sx + x]; }
  22. Item& operator()(size_t x, size_t y) { return items[y * _sx + x]; }
  23.  
  24. private:
  25. size_t _sx, _sy;
  26. Item* items;
  27. };
  28.  
  29. template<typename Item>
  30. ostream& operator <<(ostream& strm, const matrix<Item>& m)
  31. {
  32. for (size_t y = 0; y < m.sy(); y++)
  33. for (size_t x = 0; x < m.sx(); x++)
  34. (x > 0 ? strm << " " : (y > 0 ? strm << endl : strm)) << m(x, y);
  35. return strm;
  36. }
  37.  
  38. int main()
  39. {
  40. matrix<double> m(5, 5);
  41. m(3, 1) = 7;
  42. cout << m << endl;
  43. return 0;
  44. }
Success #stdin #stdout 0s 4752KB
stdin
Standard input is empty
stdout
1 0 0 0 0
0 1 0 7 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1