是否可以在lambda表达式中调用外部函数,如果没有,是否有其他方法可以使用transform和外部函数来执行此操作?
int half(int x) { return x / 2; }
int main() {
std::vector<int> test(5);
std::transform(test.begin(), test.end(), test.begin(), []() { return half(4); });
return 0;
}
答案 0 :(得分:3)
是的,it is definitely possible。事实上,您的代码唯一的问题是您的lambda应该接受int
。使用该修补程序,您的代码compiles just fine:
int half(int x) { return x / 2; }
int main() {
std::vector<int> test(5);
std::transform(test.begin(), test.end(), test.begin(), [](int) { return half(4); });
// ^^^
return 0;
}
答案 1 :(得分:1)
正如杰弗弗所说,这是可能的,也是常见的。但是,std::transform
将一元操作或二元操作作为其最终参数。你可能想要更像的东西:
static int half(int x) { return x / 2; }
int main() {
std::vector<int> test(5);
std::transform(test.begin(), test.end(), test.begin(), [](int value) {
return half(value);
});
return 0;
}