Guest User

Untitled

a guest
Nov 14th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. class matrice {
  2.  
  3. private:
  4. int* data;
  5. int rows, cols;
  6. public:
  7. matrice(int _rows, int _cols) : rows(_rows), cols(_cols) { data = new int[_rows*_cols]; std::cout << "matrice ctr" << std::endl;}
  8. // hardcoded 2x2 matrix
  9. void set_value() { data[0] = 1; data[1] = 0; data[3] = 1; data[4] = 0;}
  10. int get_rows() { return rows;}
  11. int get_cols() { return cols;}
  12.  
  13. class proxy {
  14. private:
  15. int i;
  16. int j;
  17. const int rows; // it is constant so we don't mess up with the size of the matrix
  18. int *proxy_data;
  19. public:
  20. proxy(int* _proxy_data, int _i, const int& _rows) : proxy_data(_proxy_data), i(_i), rows(_rows) { }
  21. int operator[] (int _j) { j = _j; std::cout << "proxy:ntj = " << j << " " << proxy_data[j] << std::endl; return proxy_data[i*rows + j];}
  22. };
  23.  
  24. proxy operator[] (int i) { std::cout << "matrice:nti = " << i << std::endl; return proxy(data, i, rows); }
  25.  
  26. };
  27.  
  28. int main()
  29. {
  30. int rows = 2;
  31. int cols = 2;
  32.  
  33. matrice matp(rows, cols);
  34. matp.set_value();
  35. matp[0][0] = 2;
  36. for (int i = 0;i < rows;i++) {
  37. for (int j = 0;j < cols;j++) {
  38. std::cout << "matp[" << i << "][" << j << "] = " << matp[i][j] << std::endl;
  39. }
  40. }
  41. }
  42.  
  43. int& operator[] (int j)const&&
  44.  
  45. int& operator[] (int j) const&& {
  46. std::cout << "proxy:ntj = " << j << " " << proxy_data[j] << std::endl;
  47. return proxy_data[i*rows + j];}
  48. };
  49.  
  50. template<class X>
  51. class proxy {
  52. private:
  53. X *proxy_data;
  54. public:
  55. proxy(X* _proxy_data, std::size_t i, std::size_t stride) : proxy_data(_proxy_data+i*stride) { }
  56. X& operator[] (std::size_t j) const&& { return proxy_data[j]; }
  57. };
Add Comment
Please, Sign In to add comment