作者:低调的小男2502928607 | 来源:互联网 | 2022-12-05 14:11
我有几个int
s或double
s的向量:
std::vector iv = { 1, 2, 3, 4 };
std::vector jv = { .5, 1., 1.5, 2. };
std::vector kv = { 5, 4, 3, 2 };
我需要处理每个向量的笛卡尔积:
for (int i : iv)
{
for (double j : jv)
{
for (int k : kv)
{
process(i, j, k);
}
}
}
我想把它变成一个电话
product(iv, jv, kv, [=](int i, double j, int k)
{
process(i, j, k);
});
输入向量的数量是可变的
存储在输入向量中的类型是可变的
这可能吗?(我正在使用C++ 14)
1> Barry..:
这是一个简短的递归版本,只适用于任何迭代.const&
为简单起见,它需要一切:
template
void product(F f) {
f();
}
template
void product(F f, C1 const& c1, Cs const&... cs) {
for (auto const& e1 : c1) {
product([&](auto const&... es){
f(e1, es...);
}, cs...);
}
}
这将是:
product(process, iv, jv, kv);