fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. template<class It>
  6. class generating_iterator{
  7. typedef generating_iterator this_type;
  8.  
  9. public:
  10. typedef typename std::iterator_traits<It>::value_type value_type;
  11.  
  12. generating_iterator(It first, It last)
  13. : _first(first), _cur(_first), _last(last)
  14. {
  15. }
  16.  
  17. value_type& operator()() const{
  18. if(_cur == _last)
  19. _cur = _first;
  20. return *_cur++;
  21. }
  22.  
  23. private:
  24. It _first;
  25. mutable It _cur;
  26. It _last;
  27. };
  28.  
  29. template<class It>
  30. generating_iterator<It> make_gen_iter(It f, It l){
  31. return {f, l};
  32. }
  33.  
  34. int main(){
  35. std::vector<int> v1{1,2,3};
  36. std::vector<int> v2(9);
  37. std::generate(v2.begin(), v2.end(), make_gen_iter(v1.begin(), v1.end()));
  38. for(int i=0; i < v2.size(); ++i)
  39. std::cout << v2[i] << " ";
  40. }
Success #stdin #stdout 0s 2960KB
stdin
Standard input is empty
stdout
1 2 3 1 2 3 1 2 3