Форум программистов, компьютерный форум 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.... обозначающих длины рёбер кирпичей. Определить кирпич с максимальным объемом 3) Ввести натуральное число N определить сумму четных и количество нечетных 4)Используя три различных цикла определить значение. http://rghost.ru/53121792.view
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 namespace std; int main() {
C++ Перегрузка преобразования класса-строка в тип string (и наоборот) http://www.cyberforum.ru/cpp-beginners/thread1121594.html
Помогите, а то не могу разобраться:(( перегрузка преобразования класса-строка в тип string (и наоборот). #include "stdafx.h" #include "iostream" #include <string> #include <algorithm> #include "vector" using namespace std;
C++ Перегрузка констант true и false помогите, а то не могу разобраться =(( перегрузка констант true и false: обращение к экземпляру класса дает значение true, если строка не пустая, иначе false. #include "stdafx.h" #include "iostream" #include <string> #include <algorithm> #include "vector" using namespace std; подробнее

Показать сообщение отдельно
volodja-
0 / 0 / 0
Регистрация: 17.03.2014
Сообщений: 13
17.03.2014, 15:50  [ТС]     Какова польза лямбда выражений
в общем разъяснил ситуацию лямбда, результат прямо противоположный:
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
/*
 * 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>
 
 
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;
}
 
 
void testLambdaVsFor() {
    const size_t    count = 100000000;
    vector<char>    data;
    timeval         stopwatch_time;
    char            ch = 0;
 
    cout << "data pushback " << endl;
    {
        cout << "  lambda:" << endl;
        stopwatch_time = getCurrentTime();
        data.resize(count);
        generate(data.begin(), data.end(), [&ch]() {return ch++;} );
        cout << "  " << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
    data.clear();
 
    {
        cout << "  lambda back_inserter:" << endl;
        stopwatch_time = getCurrentTime();
        generate_n(back_inserter(data), count, [&ch]() {return ch++;} );
        cout << "  " << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
    data.clear();
 
    {
        cout << "  for counter:" << endl;
        stopwatch_time = getCurrentTime();
        for (size_t i = 0; i < count; i++)
            data.push_back(ch++);
        cout << "  " << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
    cout << "data modify" << endl;
    {
        cout << "  lambda:" << endl;
        stopwatch_time = getCurrentTime();
        std::for_each(data.begin(), data.end(), [](char &ch) {ch++;} );
        cout << "  " << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
    {
        cout << "  for iterator:" << endl;
        stopwatch_time = getCurrentTime();
        for (auto i = data.begin(); i != data.end(); i++)
            (*i)++;
        cout << "  " << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
    {
        cout << "  for counter:" << endl;
        stopwatch_time = getCurrentTime();
        for (size_t i = 0; i < data.size(); i++)
            data[i]++;
        cout << "  " << getElapsedMicrosecond(stopwatch_time) << endl;
    }
 
}
 
 
int main() {
    testLambdaVsFor();
 
    return 0;
}
вывод:
data pushback
lambda:
53000
lambda back_inserter:
194452
for counter:
220521
data modify
lambda:
10275
for iterator:
61350
for counter:
120558

Добавлено через 6 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Чуть поменял, чтобы не было автоматических переменных в некоторых местах, которые будут не копироваться, а перемещаться
Скомпилено с оптимизацией без дебага ?
 
Текущее время: 17:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru