Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template <typename T>
  6. struct Iter {
  7.     Iter() { cout << '+' << this << endl; }
  8.     ~Iter() { cout << '-' << this << endl; }
  9.  
  10.     T ** pp {nullptr};
  11.     int len {0};
  12.     int it {0};
  13.  
  14.     void set(T ** pi, int l) {
  15.         pp = pi;
  16.         len = l;
  17.     }
  18.     Iter & begin() {
  19.         it = 0;
  20.         return *this;
  21.     }
  22.     int end() const {
  23.         return len;
  24.     }
  25.  
  26.     T & operator*() {
  27.         return *pp[it];
  28.     }
  29.     bool operator!=(int rhs) {
  30.         return this->it < rhs;
  31.     }
  32.     Iter & operator++() {
  33.         ++it;
  34.         return *this;
  35.     }
  36. };
  37.  
  38. class A {
  39. public:
  40.     A() : _len(4) {
  41.         _ori_aa = new int [_len];
  42.         _aa = new int * [_len];
  43.         for(int i = 0; i < _len; i++) {
  44.             _ori_aa[i] = i;
  45.             _aa[i] = _ori_aa + i;
  46.         }
  47.     }
  48.     ~A() {
  49.         delete [] _aa;
  50.         delete [] _ori_aa;
  51.     }
  52.     Iter<int> aa() const {
  53.         Iter<int> _iter;
  54.         _iter.set(_aa, _len);
  55.         return _iter;
  56.     }
  57. private:
  58.     const int _len;
  59.     int * _ori_aa;
  60.     int ** _aa;
  61. };
  62.  
  63. int main() {
  64.     A a;
  65.     Iter<int> aa = a.aa();  // copy by value
  66.     cout << '?' << &aa << endl;
  67.     for(const int & n : aa) {
  68.         cout << n << endl;
  69.     }
  70.     cout << "-------" << endl;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement