class tuple {
int* array;
int size;
public:
tuple(int* a, int s) : array(new int[s]), size(s) {
for(int i=0 ; i<s; ++i)
array[i]=a[i];
}
~tuple() { delete[] array;}
tuple (const tuple& t) : tuple(t.array, t.size) { };
class iterator {
tuple* origin;
int index;
iterator(tuple* o, int i) : origin(o), index(i) { }
friend class tuple;
public:
iterator(const iterator&) = default;
};
iterator begin() { return iterator(this, 0); }
iterator end() { return iterator(this, size); }
};
int main() {
int myarray[2] = {42, 43};
tuple mytuple(myarray, 2);
tuple::iterator iterator1 = mytuple.begin();
tuple::iterator iterator2 = mytuple.end();
iterator2(iterator1);
return 0;
}
Y2xhc3MgdHVwbGUgewoJaW50KiBhcnJheTsKCWludCBzaXplOwpwdWJsaWM6Cgl0dXBsZShpbnQqIGEsIGludCBzKSA6IGFycmF5KG5ldyBpbnRbc10pLCBzaXplKHMpIHsKCQlmb3IoaW50IGk9MCA7IGk8czsgKytpKQoJCQlhcnJheVtpXT1hW2ldOwoJfQoJfnR1cGxlKCkgeyBkZWxldGVbXSBhcnJheTt9Cgl0dXBsZSAoY29uc3QgdHVwbGUmIHQpIDogdHVwbGUodC5hcnJheSwgdC5zaXplKSB7IH07CgkKCWNsYXNzIGl0ZXJhdG9yIHsKCQl0dXBsZSogb3JpZ2luOwoJCWludCBpbmRleDsKCQlpdGVyYXRvcih0dXBsZSogbywgaW50IGkpIDogb3JpZ2luKG8pLCBpbmRleChpKSB7IH0KCQlmcmllbmQgY2xhc3MgdHVwbGU7CglwdWJsaWM6CgkJaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImKSA9IGRlZmF1bHQ7Cgl9OwoJaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQoJaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSk7IH0KfTsKCmludCBtYWluKCkgewoJaW50IG15YXJyYXlbMl0gPSB7NDIsIDQzfTsKCXR1cGxlIG15dHVwbGUobXlhcnJheSwgMik7Cgl0dXBsZTo6aXRlcmF0b3IgaXRlcmF0b3IxID0gbXl0dXBsZS5iZWdpbigpOwoJdHVwbGU6Oml0ZXJhdG9yIGl0ZXJhdG9yMiA9IG15dHVwbGUuZW5kKCk7CglpdGVyYXRvcjIoaXRlcmF0b3IxKTsKCXJldHVybiAwOwp9