Как заставить for_each принимать лямбда-функцию, которая принимает 2 аргумента? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать функцию lambda, которая принимает 2 параметра, возвращает их сумму и передает эту функцию в цикл for_each, чтобы сложить каждые 2 элемента. Но поскольку for_each позволяет функции работать с текущим элементом, я не могу добавить текущий и следующий элемент вместе!

#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector <int> v = {1, 2, 4, 54 ,64, 32, 43, 3};
    auto add = [](int x, int y) {cout <<  (x+y) << endl;};
    for_each(v.begin(), v.end(), add);
}

Но это дает ошибку, я попытался обработать это вручную:

vector <int> v = {1, 2, 4, 54 ,64, 32, 43, 3};
    auto add = [](auto x) {auto s = x + *(&x+1); //adding the current element and the next elemnt.    
                            cout << s << endl;};
    for_each(v.begin(), v.end(), add) ;

вывод:

7077509
7077510
7077512
7077562
7077572
7077540
7077551
7077511

Я не знаю, откуда взялся этот дополнительный 7077508 номер! и это не будет работать, если контейнер не является ассоциативным. Итак, как сделать так, чтобы эта add функция принимала 2 параметра.

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