fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<class geo_t = long long>
  5. struct vector2D {
  6. geo_t x, y;
  7. vector2D(geo_t x = 0, geo_t y = 0) : x(x), y(y) {}
  8.  
  9. vector2D& operator++() { return ++x, *this; }
  10. vector2D& operator--() { return --x, *this; }
  11. vector2D operator++(int) && = delete;
  12. vector2D operator--(int) && = delete;
  13. vector2D& operator++(int) & { return ++y, *this; }
  14. vector2D& operator--(int) & { return --y, *this; }
  15. friend ostream &operator << (ostream &os, const vector2D &u) {
  16. if (os.rdbuf() == cerr.rdbuf()) { os << "(" << u.x << "; " << u.y << ")"; return os; }
  17. else { os << u.x << " " << u.y; return os; }
  18. }
  19. };
  20. using Point = vector2D<long long>;
  21. using Pointf = vector2D<double>;
  22.  
  23. template<class T>
  24. void test(vector2D<T> u)
  25. {
  26. cout << "++Pre Order: " << u << " -> " << ++u; cout << " | after: " << u << endl;
  27. cout << "--Pre Order: " << u << " -> " << --u; cout << " | after: " << u << endl;
  28. cout << " Post++ Order: " << u << " -> " << u++; cout << " | after: " << u << endl;
  29. cout << " Post-- Order: " << u << " -> " << u--; cout << " | after: " << u << endl;
  30. cout << "++Mixed-- Order: " << u << " -> " << ++--++u--++--; cout << " | after: " << u << endl;
  31. cout << string(16, '-') << endl;
  32. }
  33.  
  34. int main() {
  35. Point u1(0, 0);
  36. Point u2(27, 2);
  37. test(u1);
  38. test(u2);
  39.  
  40. Pointf v1(0, 0);
  41. Pointf v2(27.2, 20.04);
  42. test(v1);
  43. test(v2);
  44.  
  45. return 0;
  46. }
Success #stdin #stdout 0.01s 5460KB
stdin
Standard input is empty
stdout
++Pre Order:     0 0 -> 1 0 | after: 1 0
--Pre Order:     1 0 -> 0 0 | after: 0 0
  Post++ Order:  0 0 -> 0 1 | after: 0 1
  Post-- Order:  0 1 -> 0 0 | after: 0 0
++Mixed-- Order: 0 0 -> 1 -1 | after: 1 -1
----------------
++Pre Order:     27 2 -> 28 2 | after: 28 2
--Pre Order:     28 2 -> 27 2 | after: 27 2
  Post++ Order:  27 2 -> 27 3 | after: 27 3
  Post-- Order:  27 3 -> 27 2 | after: 27 2
++Mixed-- Order: 27 2 -> 28 1 | after: 28 1
----------------
++Pre Order:     0 0 -> 1 0 | after: 1 0
--Pre Order:     1 0 -> 0 0 | after: 0 0
  Post++ Order:  0 0 -> 0 1 | after: 0 1
  Post-- Order:  0 1 -> 0 0 | after: 0 0
++Mixed-- Order: 0 0 -> 1 -1 | after: 1 -1
----------------
++Pre Order:     27.2 20.04 -> 28.2 20.04 | after: 28.2 20.04
--Pre Order:     28.2 20.04 -> 27.2 20.04 | after: 27.2 20.04
  Post++ Order:  27.2 20.04 -> 27.2 21.04 | after: 27.2 21.04
  Post-- Order:  27.2 21.04 -> 27.2 20.04 | after: 27.2 20.04
++Mixed-- Order: 27.2 20.04 -> 28.2 19.04 | after: 28.2 19.04
----------------