fork(1) download
  1. #include <iostream>
  2.  
  3. //normaly this is MIT Lisence for any use.
  4. //ja.wikipedia.org/wiki/MIT_License
  5.  
  6. //OR
  7.  
  8. //if you read japanese text.i agree to NYSL Version 0.9982
  9. //www.kmonos.net/nysl/
  10.  
  11. template<class T>
  12. class Number_Range{
  13. T B = 0;
  14. T E = 0;
  15. T S = 1;
  16.  
  17. public:
  18. struct Number_Range_Iterator {
  19. T N = 0;
  20. T S = 1;
  21. Number_Range_Iterator() = delete;
  22. Number_Range_Iterator(const T& Number,const T& Step = 1) :N(Number),S(Step) {}
  23.  
  24. operator T& () {
  25. return N;
  26. }
  27. T& operator *() {
  28. return N;
  29. }
  30. T& operator ++() {
  31. N += S;
  32. return N;
  33. }
  34. bool operator != (const T& rhs) {
  35. return S > 0 ? (N < rhs):(N > rhs);
  36. }
  37. };
  38. Number_Range() = delete;
  39. Number_Range(const T& Begin, const T& End, const T& Step = 1) :B(Begin), E(End), S(Step) {}
  40. Number_Range(const T& End) :B(0), E(End), S(End>0?1:-1) {}
  41. Number_Range_Iterator begin() {
  42. return Number_Range_Iterator(B,S);
  43. }
  44. Number_Range_Iterator end(){
  45. return Number_Range_Iterator(E,S);
  46. }
  47.  
  48.  
  49. };
  50.  
  51. int main() {
  52. for (auto&o : Number_Range<int>(0, 10)) {
  53. std::cout << o << ' ';
  54. } std::cout << std::endl;
  55.  
  56. for (auto&o : Number_Range<int>(10)) {
  57. std::cout << o << ' ';
  58. }
  59. std::cout << std::endl;
  60. for (auto&o : Number_Range<int>(100,110,2)) {
  61. std::cout << o << ' ';
  62. }
  63. std::cout << std::endl;
  64. for (auto&o : Number_Range<int>(100,110,3)) {
  65. std::cout << o << ' ';
  66. }
  67. std::cout << std::endl;
  68. for (auto&o : Number_Range<int>(-10)) {
  69. std::cout << o << ' ';
  70. }
  71. std::cout << std::endl;
  72. for (auto&o : Number_Range<int>(0,-10,-3)) {
  73. std::cout << o << ' ';
  74. }
  75. std::cout << std::endl;
  76. return 0;
  77. }
  78.  
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
100 102 104 106 108 
100 103 106 109 
0 -1 -2 -3 -4 -5 -6 -7 -8 -9 
0 -3 -6 -9