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

Какова польза лямбда выражений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввести несколько кирпичей, определить обьем и определить самый большой http://www.cyberforum.ru/cpp-beginners/thread1121634.html
1)Определить N первых членов рекуррентной последовательностиhttp://rghost.ru/53121622.view 2)Ввести N троек чисел a1,b1,c1; a2,b2, c2 an,bn,cn.... обозначающих длины рёбер кирпичей....
C++ Перевод числа из двоичной системы в десятичную Помогите написать программу для перевода из 2 в 10. Если число делится на 3, то вывести и результат деления http://www.cyberforum.ru/cpp-beginners/thread1121631.html
C++ Помогите написать две небольшие программы по блок схемам
Помогите написать две небольшие программы по блок схемам для уравнения X^3+3X^2+6X-1=0 1.Метод простой итерации 2.Метод Хорд
В матрице, записанной в файл, четные элементы разделить на 4, а к нечетным прибавить 10 C++
Вот условие задачи: В матрице A(6,6) четные элементы разделить на 4, а к нечетным прибавить 10. Вывести полученную матрицу. код: #include <iostream> #include <cstdio> #include <cmath> using...
C++ Перегрузка преобразования класса-строка в тип string (и наоборот) http://www.cyberforum.ru/cpp-beginners/thread1121594.html
Помогите, а то не могу разобраться:(( перегрузка преобразования класса-строка в тип string (и наоборот). #include "stdafx.h" #include "iostream" #include <string> #include <algorithm>...
C++ Перегрузка констант true и false помогите, а то не могу разобраться =(( перегрузка констант true и false: обращение к экземпляру класса дает значение true, если строка не пустая, иначе false. #include "stdafx.h" #include... подробнее

Показать сообщение отдельно
volodja-
0 / 0 / 0
Регистрация: 17.03.2014
Сообщений: 13

Какова польза лямбда выражений - C++

17.03.2014, 13:05. Просмотров 1526. Ответов 31
Метки (Все метки)

Вот набросал пример который показывает что лямбда выражения медленней простых циклов и больше кода, в чем тогда их польза ?

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 * main.cpp
 *
 *  Created on: 31 янв. 2014 г.
 *      Author: volodja
 */
 
 
 
 
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdint.h>
#include <time.h>
#include <sys/time.h>
#include <string>
 
 
#include "stopwatch.h"
 
 
using namespace std;
 
 
timeval getCurrentTime() {
    timeval current_time;
    gettimeofday(&current_time, NULL);
    return  current_time;
}
 
 
uint64_t getElapsedMicrosecond(const timeval &stopwatch_time) {
    timeval current_time = getCurrentTime();
    return (current_time.tv_sec - stopwatch_time.tv_sec) * 1000000 + current_time.tv_usec - stopwatch_time.tv_usec;
}
 
 
vector<char> testCopy() {
    vector<char>    result;
    char            ch = 0;
 
    for (size_t i = 0; i < 10; i++) {
        ch++;
        result.push_back(ch);
    }
 
    return result;
}
 
 
vector<char>&& testMove() {
    vector<char>    result;
    char            ch = 0;
 
    for (size_t i = 0; i < 10; i++) {
        ch++;
        result.push_back(ch);
    }
 
    return move(result);
}
 
 
void testMoveVsCopy() {
    timeval         stopwatch_time;
    const size_t    count = 1000000;
    vector<char>    v;
 
    {
        cout << "copy: " << endl;
        stopwatch_time = getCurrentTime();
        for (size_t i = 0; i < count; i++)
            v.push_back(testCopy()[i % 100]);
        cout << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
    {
        cout << "copy lambda: " << endl;
        stopwatch_time = getCurrentTime();
        size_t i = 0;
        generate_n(back_inserter(v), count,
            [&i]() -> char {
                i++;
                return testCopy()[i % 100];
            }
        );
        cout << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
    {
        cout << "move: " << endl;
        stopwatch_time = getCurrentTime();
        for (size_t i = 0; i < count; i++)
            v.push_back(testMove()[i % 100]);
        cout << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
    {
        cout << "move lambda: " << endl;
        stopwatch_time = getCurrentTime();
        size_t i = 0;
        generate_n(back_inserter(v), count,
            [&i]() -> char {
                i++;
                return testMove()[i % 100];
            }
        );
        cout << getElapsedMicrosecond(stopwatch_time) << endl;
    }
}
 
 
//void executeLambda([](const int &i) -> double) {
//
//}
 
 
void testLambda() {
    int a = 1, b = 2;
    cout << "b = " << b << endl;
    [=, &b]{
        b = b + a;
    }();
    cout << "b = " << b << endl;
 
}
 
 
int main() {
    testMoveVsCopy();
 
    testLambda();
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru