fork download
  1. #include <iostream>
  2.  
  3. template<typename T> class Table
  4. {
  5. private:
  6. int width, height, p2;
  7. T *data;
  8. public:
  9. class Column
  10. {
  11. private:
  12. T* & data;
  13. int & x;
  14. int & p2;
  15. public:
  16. Column(T* & data, int & x, int & p2) :data(data), x(x), p2(p2) {}
  17. T & operator[](int y)
  18. {
  19. return data[x + (y<<p2)];
  20. }
  21. };
  22. Table(int width, int height, T fill)
  23. {
  24. this->width = width;
  25. this->height = height;
  26. this->p2 = 32 - __builtin_clz(width - 1);
  27. int len = height * sizeof(T) << p2;
  28. this->data = new T[len];
  29. for (int i = 0; i < len; i++) data[i] = fill;
  30. }
  31. Column operator[](int x)
  32. {
  33. return Column(data, x, p2);
  34. }
  35. };
  36.  
  37. int main()
  38. {
  39. Table<int> Table(100, 200, 73);
  40. Table[10][20] = 100;
  41. std::cout << Table[9][19] << " " << Table[10][20] << " " << Table[11][21] << std::endl;
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0s 4332KB
stdin
Standard input is empty
stdout
73 100 73