Микширование для каждого и лямбды в с ++ - PullRequest
3 голосов
/ 12 апреля 2011

Я хотел немного поиграть с лямбдами и для каждого (для цикла на основе диапазона, а не для STL for_each) в C ++ 0x. Поэтому я пошел в вики и попытался переписать примеры из вики, используя лямбды:

    std::vector<int> some_list;
some_list.push_back(42);
some_list.push_back(37);
int total = 0;
int value = 5;
for(int& x:some_list)
{
    [](int x)
    {
        cout << "xL=" <<x <<endl;
    };
}

for(auto x:some_list)
    cout<< "x="<<x<<endl;

    return result;
}

Проблема в том, что я не вижу никакого cout в лямбда-версии, для каждой версии печатается x красиво ... Я предполагаю, что невозможно смешивать для каждого и лямбда-выражения, потому что лямбда-выражения могут быть только вместо функции ", и не может выступать в качестве тела цикла, но я не уверен, поэтому, если кто-то может подтвердить, это было бы круто

компилятор: GCC 4.6

Ответы [ 3 ]

4 голосов
/ 12 апреля 2011

Вам следует позвонить оператору () по самой лямбде.

for(int& x:some_list)
{
    [](int x)
    {
        cout << "xL=" <<x <<endl;
    }(x);  //notice the "()"
}
3 голосов
/ 12 апреля 2011

В первом «for» вы только создаете лямбда-функцию, но не вызываете ее.

На самом деле лямбда-функция здесь не кажется полезной - вы можете просто написать код. Но если вы все равно хотите использовать лямбду, добавьте «()» после «}».

Это полезно в другой ситуации - когда используется std::for_each.

2 голосов
/ 12 апреля 2011

Вы используете обычный цикл for, в котором нет лямбды.Фигурные скобки - это просто блок кода, поэтому вы определяете лямбду для каждой итерации, а не вызываете ее.

То, что вы хотите сделать, это использовать std::for_each.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...