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

Анонимный объект по аналогии с анонимной функцией (lambda) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ UnixPosix, не ври мне! (неправильный подсчет времени вручную) http://www.cyberforum.ru/cpp-beginners/thread1062443.html
Проблема следующая - реализовал я нуля перевод из posix в человечную дату. А тут проблема появилась: ввожу 54588753952 в свою программу, а также сюда http://www.cy-pr.com/tools/time/, всё совпадает,...
C++ Сформировать файл h, заменив каждое вхождение слова «это» на слово «то» Задача: Дан текстовый файл f. Сформировать файл h, заменив каждое вхождение слова «это» на слово «то». Слова – группы символов, разделенные про-белом или признаком конца строки. Никак не разберусь... http://www.cyberforum.ru/cpp-beginners/thread1062428.html
Для заданного натурального n вычислить C++
Для заданого натурального n обчислити S = 1 + 1*2 + 1*2*3 + … + 1*2* …*n . нужно написать программу в С++
Таблица расхода материалов за сутки C++
#include <iostream> #include <conio.h> #include <string> using namespace std; int main(){ string s; struct table{ int nomer; string surname; string name;
C++ Изменить матрицу так, чтобы в строках остались элементы, которые встречаются более одного раза, а другие заменить нулями http://www.cyberforum.ru/cpp-beginners/thread1062405.html
Условие: Даны натуральные числа m, n (m, n <= 10) и целочисленную матрицу размера m x n. Изменить матрицу так, чтобы в строках остались элементы, которые встречаются более одного раза, а другие...
C++ Профессионалы программирования дайте совет Хочу стать отличным программистом. Если честно в школе до 9-го класса учился плохо в 10-11 поднажал чтобы поступить в институт,как бы знаний хватило чтобы поступить а за время учебы в школе много... подробнее

Показать сообщение отдельно
outoftime
║XLR8║
510 / 432 / 33
Регистрация: 25.07.2009
Сообщений: 2,295

Анонимный объект по аналогии с анонимной функцией (lambda) - C++

03.01.2014, 19:18. Просмотров 497. Ответов 12
Метки (Все метки)

Приведу вот такой пример:
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
#include <iostream>
#include <vector>
#include <algorithm>
 
class Generator
{
public:
    Generator() : i(1) { }
 
    const int &operator() ()
    {
        return factorial(i++);
    }
private:
    const int factorial(const int &n)
    {
        if (n == 1) return 1;
        return n * factorial(n - 1);
    }
    int i;
};
 
int main()
{
    const int n = 10;
    std::vector<int> v(n);
    std::generate(v.begin(), v.end(), Generator());
    std::cout << std::accumulate(v.begin(), v.end(), 0);
}
После этого кода я задумался а нельзя ли сделать тоже с использованием анонимного вызываемого объекта (функтора) сохраняя его внутренне состояние?

Добавлено через 59 минут
Ничего кроме как держать состояние объекта в отдельной области видимости не могу придумать...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    const int n = 10;
    std::vector<int> v(n);
    {
        int i = 1;
        std::function<int(int)> factorial = [&factorial](const int &n){
            return n == 1 ? 1 : n * factorial(n - 1);
        };
        auto generator = [&](){ return factorial(i++); };
        std::generate(v.begin(), v.end(), generator);
    }
    std::cout << std::accumulate(v.begin(), v.end(), 0);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru