fork(1) download
  1. #include <iostream>
  2.  
  3. template<typename T, size_t columns>
  4. class TransMatrix {
  5. using Matrix = T(*)[columns];
  6. class Column {
  7. public:
  8. const T& operator[](const size_t column_index) const {
  9. return m_[column_index][line_index_];
  10. }
  11.  
  12. private:
  13. friend class TransMatrix;
  14. Column(const Matrix P, size_t lines) : m_(P), lines_(lines) { }
  15. const Matrix m_;
  16. const size_t lines_;
  17. size_t line_index_;
  18. };
  19.  
  20. public:
  21. TransMatrix(Matrix m, size_t lines) : column_(Column(m, lines)) { }
  22.  
  23. Column& operator[](const size_t line_index) {
  24. column_.line_index_ = line_index;
  25. return column_;
  26. }
  27.  
  28. private:
  29. Column column_;
  30. };
  31.  
  32. int main(int argc, char* argv[]) {
  33. constexpr int kColumns = 4;
  34.  
  35. int a[3][kColumns] = {
  36. { 1, 2, 3, 4 },
  37. { 5, 6, 7, 8 },
  38. { 9, 10, 11, 12 }
  39. };
  40.  
  41. TransMatrix<int, kColumns> trans(a, 3);
  42.  
  43. for (int i = 0; i < 4; i++) {
  44. for(int j = 0; j < 3; j++) {
  45. std::cout << trans[i][j] << ", ";
  46. }
  47. std::cout << std::endl;
  48. }
  49.  
  50. std::cout << std::endl;
  51. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
1, 5, 9, 
2, 6, 10, 
3, 7, 11, 
4, 8, 12,