Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cassert>
  4. #include <algorithm>
  5.  
  6. namespace my {
  7. using Size = std::ptrdiff_t;
  8. using std::initializer_list;
  9. using std::vector;
  10.  
  11. template<class Item>
  12. class Matrix {
  13. private:
  14. vector<Item> items_;
  15. Size n_cols_;
  16.  
  17. auto index_for(const Size x, const Size y) const
  18. -> Size
  19. { return y * n_cols_ + x; }
  20.  
  21. public:
  22. auto n_rows() const -> Size { return items_.size() / n_cols_; }
  23. auto n_cols() const -> Size { return n_cols_; }
  24.  
  25. auto item(const Size x, const Size y)
  26. -> Item&
  27. { return items_[index_for(x, y)]; }
  28.  
  29. auto item(const Size x, const Size y) const
  30. -> const Item&
  31. { return items_[index_for(x, y)]; }
  32.  
  33. Matrix() : n_cols_(0) { }
  34.  
  35. Matrix(const Size n_cols, const Size n_rows)
  36. : items_(n_cols* n_rows)
  37. , n_cols_(n_cols)
  38. { }
  39.  
  40. Matrix(const initializer_list<initializer_list<Item>>& values)
  41. : items_()
  42. , n_cols_(values.size() == 0 ? 0 : values.begin()->size())
  43. {
  44. for(const auto& row : values)
  45. {
  46. assert(Size(row.size()) == n_cols_);
  47. items_.insert(items_.end(), row.begin(), row.end());
  48. }
  49. }
  50. };
  51. }
  52.  
  53. using my::Matrix;
  54.  
  55. auto some_matrix()
  56. -> Matrix
  57. {
  58. // argument list for class template "my::Matrix" is missing
  59. return
  60. {
  61. { 1, 2, 3, 4, 5, 6, 7 },
  62. { 8, 9, 10, 11, 12, 13, 14 },
  63. { 15, 16, 17, 18, 19, 20, 21 }
  64. };
  65. }
  66.  
  67. auto main() -> int {
  68.  
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement