fork download
  1. #include <iostream>
  2. #include <iterator>
  3.  
  4. struct Generator : std::iterator<std::input_iterator_tag, int>
  5. {
  6. Generator &operator++()
  7. {
  8. ++n;
  9. gen = false;
  10. }
  11. Generator operator++(int)
  12. {
  13. Generator t = *this;
  14. ++*this;
  15. return t;
  16. }
  17. bool operator==(Generator const &g)
  18. {
  19. return n == g.n;
  20. }
  21. bool operator!=(Generator const &g)
  22. {
  23. return n != g.n;
  24. }
  25. int operator*()
  26. {
  27. if(!gen)
  28. {
  29. val = n*n*n;
  30. gen = true;
  31. std::cout << "Generated " << n << " -> " << val << std::endl;
  32. }
  33. return val;
  34. }
  35. private:
  36. int n = 0;
  37. bool gen = false;
  38. int val;
  39. };
  40.  
  41. int main()
  42. {
  43. Generator g;
  44. for(unsigned i = 0; i < 100; ++i, ++g)
  45. {
  46. if(i%3 == 0)
  47. {
  48. std::cout << *g << std::endl;
  49. }
  50. }
  51. }
  52.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
Generated 0 -> 0
0
Generated 3 -> 27
27
Generated 6 -> 216
216
Generated 9 -> 729
729
Generated 12 -> 1728
1728
Generated 15 -> 3375
3375
Generated 18 -> 5832
5832
Generated 21 -> 9261
9261
Generated 24 -> 13824
13824
Generated 27 -> 19683
19683
Generated 30 -> 27000
27000
Generated 33 -> 35937
35937
Generated 36 -> 46656
46656
Generated 39 -> 59319
59319
Generated 42 -> 74088
74088
Generated 45 -> 91125
91125
Generated 48 -> 110592
110592
Generated 51 -> 132651
132651
Generated 54 -> 157464
157464
Generated 57 -> 185193
185193
Generated 60 -> 216000
216000
Generated 63 -> 250047
250047
Generated 66 -> 287496
287496
Generated 69 -> 328509
328509
Generated 72 -> 373248
373248
Generated 75 -> 421875
421875
Generated 78 -> 474552
474552
Generated 81 -> 531441
531441
Generated 84 -> 592704
592704
Generated 87 -> 658503
658503
Generated 90 -> 729000
729000
Generated 93 -> 804357
804357
Generated 96 -> 884736
884736
Generated 99 -> 970299
970299