#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
template<typename T>
inline void PRINT_ELEMENTS(const T &coll, const char *optcstr = "")
{
typename T::const_iterator pos;
cout << optcstr;
for(pos = coll.begin(); pos != coll.end(); ++pos)
cout << *pos << " ";
cout << endl;
}
class IntSequence{
private:
int value;
public:
IntSequence(int initValue): value(initValue) {}
int operator() () {
return value++;
}
};
int main()
{
list<int> coll;
IntSequence seq(1); //серия целых начинающихся с 1
/*вставка значений от 1 до 4
передача объекта функции по ссылке
чтобы при следующем вызове значение начиналось с 5*/
generate_n<back_insert_iterator<list<int> >,
int, IntSequence &>(back_inserter(coll), //начало
4, //кол-во значений
seq); //генератор значений
PRINT_ELEMENTS(coll);
//вставка эл-ов от 42 до 45
generate_n(back_inserter(coll), //начало
4, //кол-во значений
IntSequence(42)); //генератор значений
PRINT_ELEMENTS(coll);
/*продолжение первой последовательности
передача объекта функции по ссылке
чтобы при следующем вызове значения тоже начинались с 5*/
generate_n(back_inserter(coll), //начало
4, //кол-во значений
seq); //генератор значений
PRINT_ELEMENTS(coll);
//снова продолжить первую последовательность
generate_n(back_inserter(coll), //начало
4, //кол-во значений
seq); //генератор значений
PRINT_ELEMENTS(coll);
cout << "\n\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGFsZ29yaXRobT4gICAgICAgICAgICAKI2luY2x1ZGUgPGl0ZXJhdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmlubGluZSB2b2lkIFBSSU5UX0VMRU1FTlRTKGNvbnN0IFQgJmNvbGwsIGNvbnN0IGNoYXIgKm9wdGNzdHIgPSAiIikKewogICAgdHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgcG9zOwogCiAgICBjb3V0IDw8IG9wdGNzdHI7CiAgICBmb3IocG9zID0gY29sbC5iZWdpbigpOyBwb3MgIT0gY29sbC5lbmQoKTsgKytwb3MpCiAgICAgICAgY291dCA8PCAqcG9zIDw8ICIgIjsKIAogICAgY291dCA8PCBlbmRsOwp9CiAKY2xhc3MgSW50U2VxdWVuY2V7CiAgICBwcml2YXRlOgogICAgICAgIGludCB2YWx1ZTsKIAogICAgcHVibGljOgogICAgICAgIEludFNlcXVlbmNlKGludCBpbml0VmFsdWUpOiB2YWx1ZShpbml0VmFsdWUpIHt9CiAKICAgICAgICBpbnQgb3BlcmF0b3IoKSAoKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZSsrOwogICAgICAgIH0KfTsKIAppbnQgbWFpbigpCnsKICAgIGxpc3Q8aW50PiBjb2xsOwogICAgSW50U2VxdWVuY2Ugc2VxKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAvL9GB0LXRgNC40Y8g0YbQtdC70YvRhSDQvdCw0YfQuNC90LDRjtGJ0LjRhdGB0Y8g0YEgMQogCiAgICAvKtCy0YHRgtCw0LLQutCwINC30L3QsNGH0LXQvdC40Lkg0L7RgiAxINC00L4gNAogICAg0L/QtdGA0LXQtNCw0YfQsCDQvtCx0YrQtdC60YLQsCDRhNGD0L3QutGG0LjQuCDQv9C+INGB0YHRi9C70LrQtQogICAg0YfRgtC+0LHRiyDQv9GA0Lgg0YHQu9C10LTRg9GO0YnQtdC8INCy0YvQt9C+0LLQtSDQt9C90LDRh9C10L3QuNC1INC90LDRh9C40L3QsNC70L7RgdGMINGBIDUqLwogCiAgICBnZW5lcmF0ZV9uPGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPGxpc3Q8aW50PiA+LAogICAgICAgICAgICBpbnQsIEludFNlcXVlbmNlICY+KGJhY2tfaW5zZXJ0ZXIoY29sbCksICAvL9C90LDRh9Cw0LvQvgogICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy/QutC+0Lst0LLQviDQt9C90LDRh9C10L3QuNC5CiAgICAgICAgICAgIHNlcSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/Qs9C10L3QtdGA0LDRgtC+0YAg0LfQvdCw0YfQtdC90LjQuQogCiAgICBQUklOVF9FTEVNRU5UUyhjb2xsKTsKIAogICAgLy/QstGB0YLQsNCy0LrQsCDRjdC7LdC+0LIg0L7RgiA0MiDQtNC+IDQ1CiAgICBnZW5lcmF0ZV9uKGJhY2tfaW5zZXJ0ZXIoY29sbCksICAgICAgICAgLy/QvdCw0YfQsNC70L4KICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgLy/QutC+0Lst0LLQviDQt9C90LDRh9C10L3QuNC5CiAgICAgICAgICAgIEludFNlcXVlbmNlKDQyKSk7ICAgICAgICAgICAvL9Cz0LXQvdC10YDQsNGC0L7RgCDQt9C90LDRh9C10L3QuNC5CiAKICAgIFBSSU5UX0VMRU1FTlRTKGNvbGwpOwogCiAgICAvKtC/0YDQvtC00L7Qu9C20LXQvdC40LUg0L/QtdGA0LLQvtC5INC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQuAogICAg0L/QtdGA0LXQtNCw0YfQsCDQvtCx0YrQtdC60YLQsCDRhNGD0L3QutGG0LjQuCDQv9C+INGB0YHRi9C70LrQtQogICAg0YfRgtC+0LHRiyDQv9GA0Lgg0YHQu9C10LTRg9GO0YnQtdC8INCy0YvQt9C+0LLQtSDQt9C90LDRh9C10L3QuNGPINGC0L7QttC1INC90LDRh9C40L3QsNC70LjRgdGMINGBIDUqLwogCiAgICBnZW5lcmF0ZV9uKGJhY2tfaW5zZXJ0ZXIoY29sbCksICAgICAvL9C90LDRh9Cw0LvQvgogICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgIC8v0LrQvtC7LdCy0L4g0LfQvdCw0YfQtdC90LjQuQogICAgICAgICAgICBzZXEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v0LPQtdC90LXRgNCw0YLQvtGAINC30L3QsNGH0LXQvdC40LkKIAogICAgUFJJTlRfRUxFTUVOVFMoY29sbCk7CiAKICAgIC8v0YHQvdC+0LLQsCDQv9GA0L7QtNC+0LvQttC40YLRjCDQv9C10YDQstGD0Y4g0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtGMCiAKICAgIGdlbmVyYXRlX24oYmFja19pbnNlcnRlcihjb2xsKSwgICAgICAgICAgICAgLy/QvdCw0YfQsNC70L4KICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8v0LrQvtC7LdCy0L4g0LfQvdCw0YfQtdC90LjQuQogICAgICAgICAgICBzZXEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/Qs9C10L3QtdGA0LDRgtC+0YAg0LfQvdCw0YfQtdC90LjQuQogCiAgICBQUklOVF9FTEVNRU5UUyhjb2xsKTsKIAogICAgY291dCA8PCAiXG5cbiI7CiAgICAgICAgcmV0dXJuIDA7Cn0=