具有 lambda 函数的函数向量

Vector of function with lambda functions

本文关键字:函数 向量 具有 lambda      更新时间:2023-10-16

此代码不正确:

std::vector<int (*)(int)> fv;
for (int i=0; i<10; i++)
{
auto g = [i](int n) -> int
{
return n+i;
};
fv.push_back(&g);
}

因为 lambda 函数不是类型int (*)(int)而是对象。 我的问题是:我必须放入什么类型vector<...>

您可以使用库类型std::function

例如:

#include <vector>
#include <functional>
void foo() {
std::vector<std::function<int(int)>> fv;
for (int i = 0; i < 10; ++i) {
fv.emplace_back([i](int n) {
return n + i;
});
}
}

原始代码的问题在于lambda执行捕获(索引i(。 如果没有捕获,lambda 将可转换为指向函数的 int(*((int( 指针,并且代码将编译。

使用 std::函数有效,但它会带来性能损失,所以更好的问题是你打算用函子向量解决什么问题?