Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
1

Функтор

29.03.2013, 17:45. Показов 829. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! есть программа, которая демонстрирует передачу объекта функции по ссылке:

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

обыскался ошибку, но найти не могу, буду благодарен за помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2013, 17:45
Ответы с готовыми решениями:

Не работает шаблонный функтор :(
#include &lt;bits/stdc++.h&gt; using namespace std; template&lt;typename cType&gt; struct myMax {...

Функтор и перегруженный оператор
захотел понять многопоточность в новом стадарте с++11 - смотрю...

Что такое функтор
Доброе утро, верное ли данное утверждение: Я считаю, что нет. (1) Код ниже - в местах...

Класс-функтор с использованием foreach и transform
Добрый вечер господа, Не считает правильно сумму. Выдает феерично большое число. Не подскажите в...

4
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
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 &>(/* ... */);
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
29.03.2013, 18:41  [ТС] 3
gray_fox, моя ошибка не записал, но нет, вот именно и не выводится с ним правильно...
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
29.03.2013, 18:44 4
yoghurt92 :/, добавил амперсанд и http://ideone.com/mitTIT .
1
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
29.03.2013, 18:46  [ТС] 5
gray_fox, значит это что-то у меня не так, спасибо вам, что помогли
0
29.03.2013, 18:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2013, 18:46
Помогаю со студенческими работами здесь

описать словами указатель на функцию, функтор
здравствуйте, помогите мне грамотно описать словами указатель на функцию, функтор. мол когда и...

Не могу написать функтор для поиска в векторе
Есть вектор, содержащий указатели на класс, нужно использовать функцию find, которая ищет элемент...

Нужен функтор с ограничением
{-# LANGUAGE FlexibleInstances,DeriveFunctor #-} data A a = A a a deriving Functor data B a b =...

Функтор списка (swi prolog)
Ввожу цель A= .(a, ). И хотел бы увидеть ответ A= или A=(b, .(a,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru