C++ передача возвращаемого значение лямбды в функцию
Есть функция, которая просто выводит числа из вектора.
void test(std::vector<int> vec)
{
for(int item: vec)
std::cout << item << std::endl;
}
Есть вектор:
std::vector<int> vec = {1, 2, 3};
Хочу передать в функцию копию этого вектора, у которого все элементы будут больше на 1. Сделал это так:
int main()
{
std::vector<int> vec = {1, 2, 3};
std::vector<int> temp;
for(int item: vec)
vec.push_back(item + 1);
test(temp);
return 0;
}
Пока проблем нет, но как пытаюсь сделать через лябмду:
int main()
{
std::vector<int> vec = {1, 2, 3};
test([vec]() {
std::vector<int> temp;
for(int item: vec)
temp.push_back(item + 1);
return temp;
});
return 0;
}
Ловлю ошибку:
could not convert ‘main()::{std::vector(vec)}’ from ‘main()::’ to ‘std::vector
Я понимаю, что в качестве аргумента передается сама лямбда, а как передать то, что она возвращает?
Ответы (1 шт):
Вы же должны передавать не саму лямбду, а результат ее вызова!...
return temp;
}());
return 0;
}
Обратите внимание на () по завершении лямбды...
Но мне больше нравится вариант передачи вектора, а не его захвата.
test([](const std::vector<int>& vec) {
std::vector<int> temp;
for(int item: vec)
temp.push_back(item + 1);
return temp;
}(vec));
А еще больше - вообще без лишнего вектора:
void test(std::vector<int>& vec, std::function<int(int)> f)
{
for(int item: vec)
std::cout << f(item) << std::endl;
}
int main()
{
std::vector<int> vec = {1, 2, 3};
test(vec,[](int i) { return i+1; });
return 0;
}
Никаких промежуточных векторов... Да и в test передается ссылка, а не копия из-за передачи по значению :)