fork download
  1. #include <iostream>
  2. #include <list>
  3. #include <algorithm>
  4. #include <iterator>
  5. using namespace std;
  6.  
  7. template<typename T>
  8. inline void PRINT_ELEMENTS(const T &coll, const char *optcstr = "")
  9. {
  10. typename T::const_iterator pos;
  11.  
  12. cout << optcstr;
  13. for(pos = coll.begin(); pos != coll.end(); ++pos)
  14. cout << *pos << " ";
  15.  
  16. cout << endl;
  17. }
  18.  
  19. class IntSequence{
  20. private:
  21. int value;
  22.  
  23. public:
  24. IntSequence(int initValue): value(initValue) {}
  25.  
  26. int operator() () {
  27. return value++;
  28. }
  29. };
  30.  
  31. int main()
  32. {
  33. list<int> coll;
  34. IntSequence seq(1); //серия целых начинающихся с 1
  35.  
  36. /*вставка значений от 1 до 4
  37.   передача объекта функции по ссылке
  38.   чтобы при следующем вызове значение начиналось с 5*/
  39.  
  40. generate_n<back_insert_iterator<list<int> >,
  41. int, IntSequence &>(back_inserter(coll), //начало
  42. 4, //кол-во значений
  43. seq); //генератор значений
  44.  
  45. PRINT_ELEMENTS(coll);
  46.  
  47. //вставка эл-ов от 42 до 45
  48. generate_n(back_inserter(coll), //начало
  49. 4, //кол-во значений
  50. IntSequence(42)); //генератор значений
  51.  
  52. PRINT_ELEMENTS(coll);
  53.  
  54. /*продолжение первой последовательности
  55.   передача объекта функции по ссылке
  56.   чтобы при следующем вызове значения тоже начинались с 5*/
  57.  
  58. generate_n(back_inserter(coll), //начало
  59. 4, //кол-во значений
  60. seq); //генератор значений
  61.  
  62. PRINT_ELEMENTS(coll);
  63.  
  64. //снова продолжить первую последовательность
  65.  
  66. generate_n(back_inserter(coll), //начало
  67. 4, //кол-во значений
  68. seq); //генератор значений
  69.  
  70. PRINT_ELEMENTS(coll);
  71.  
  72. cout << "\n\n";
  73. return 0;
  74. }
Success #stdin #stdout 0s 2984KB
stdin
Standard input is empty
stdout
1 2 3 4 
1 2 3 4 42 43 44 45 
1 2 3 4 42 43 44 45 5 6 7 8 
1 2 3 4 42 43 44 45 5 6 7 8 5 6 7 8