#include <iostream>
#include <algorithm>
#include <vector>
template<class It>
class generating_iterator{
typedef generating_iterator this_type;
public:
typedef typename std::iterator_traits<It>::value_type value_type;
generating_iterator(It first, It last)
: _first(first), _cur(_first), _last(last)
{
}
value_type& operator()() const{
if(_cur == _last)
_cur = _first;
return *_cur++;
}
private:
It _first;
mutable It _cur;
It _last;
};
template<class It>
generating_iterator<It> make_gen_iter(It f, It l){
return {f, l};
}
int main(){
std::vector<int> v1{1,2,3};
std::vector<int> v2(9);
std::generate(v2.begin(), v2.end(), make_gen_iter(v1.begin(), v1.end()));
for(int i=0; i < v2.size(); ++i)
std::cout << v2[i] << " ";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGU8Y2xhc3MgSXQ+CmNsYXNzIGdlbmVyYXRpbmdfaXRlcmF0b3J7CiAgdHlwZWRlZiBnZW5lcmF0aW5nX2l0ZXJhdG9yIHRoaXNfdHlwZTsKCnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0Pjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICBnZW5lcmF0aW5nX2l0ZXJhdG9yKEl0IGZpcnN0LCBJdCBsYXN0KQogICAgOiBfZmlyc3QoZmlyc3QpLCBfY3VyKF9maXJzdCksIF9sYXN0KGxhc3QpCiAgewogIH0KCiAgdmFsdWVfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0ewogICAgaWYoX2N1ciA9PSBfbGFzdCkKICAgICAgX2N1ciA9IF9maXJzdDsKICAgIHJldHVybiAqX2N1cisrOwogIH0KCnByaXZhdGU6CiAgSXQgX2ZpcnN0OwogIG11dGFibGUgSXQgX2N1cjsKICBJdCBfbGFzdDsKfTsKCnRlbXBsYXRlPGNsYXNzIEl0PgpnZW5lcmF0aW5nX2l0ZXJhdG9yPEl0PiBtYWtlX2dlbl9pdGVyKEl0IGYsIEl0IGwpewogIHJldHVybiB7ZiwgbH07Cn0KCmludCBtYWluKCl7CiAgc3RkOjp2ZWN0b3I8aW50PiB2MXsxLDIsM307CiAgc3RkOjp2ZWN0b3I8aW50PiB2Mig5KTsKICBzdGQ6OmdlbmVyYXRlKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBtYWtlX2dlbl9pdGVyKHYxLmJlZ2luKCksIHYxLmVuZCgpKSk7CiAgZm9yKGludCBpPTA7IGkgPCB2Mi5zaXplKCk7ICsraSkKICAgIHN0ZDo6Y291dCA8PCB2MltpXSA8PCAiICI7Cn0=