Форум программистов, компьютерный форум CyberForum.ru

Функтор - C++

Восстановить пароль Регистрация
 
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
29.03.2013, 17:45     Функтор #1
Доброго времени суток! есть программа, которая демонстрирует передачу объекта функции по ссылке:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#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 _tmain(int argc, _TCHAR* argv[])
{
    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;
}
должно получиться следующие:

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

но у меня все остается так же

1 2 3 4
1 2 3 4 42 43 44 45
1 2 3 4 42 43 44 45 1 2 3 4
1 2 3 4 42 43 44 45 1 2 3 4 1 2 3 4

обыскался ошибку, но найти не могу, буду благодарен за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2013, 17:45     Функтор
Посмотрите здесь:

описать словами указатель на функцию, функтор C++
Не могу написать функтор для поиска в векторе C++
Функтор и перегруженный оператор C++
QMap - как задать собственный функтор проверки уникальности ключа ? C++ Qt

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.03.2013, 18:34     Функтор #2
Амперсанд видимо забыл:
Цитата Сообщение от yoghurt92 Посмотреть сообщение
generate_n<back_insert_iterator<list<int> >, int, IntSequence>(back_inserter(coll), //начало 4, //кол-во значений seq); //генератор значений
C++
1
generate_n<back_insert_iterator<list<int> >, int, IntSequence &>(/* ... */);
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
29.03.2013, 18:41  [ТС]     Функтор #3
gray_fox, моя ошибка не записал, но нет, вот именно и не выводится с ним правильно...
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.03.2013, 18:44     Функтор #4
yoghurt92 :/, добавил амперсанд и http://ideone.com/mitTIT .
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
29.03.2013, 18:46  [ТС]     Функтор #5
gray_fox, значит это что-то у меня не так, спасибо вам, что помогли
Yandex
Объявления
29.03.2013, 18:46     Функтор
Ответ Создать тему
Опции темы

Текущее время: 08:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru