gpt4 book ai didi

C++ 生成可变数量的嵌套 FOR 循环

转载 作者:行者123 更新时间:2023-12-02 01:27:38 24 4
gpt4 key购买 nike

我有一个包含元素 vector 的结构:

struct SomeStruct
{
std::vector<Element> vec;
};

每个元素包含一个容器:

struct Element
{
Container m_container;
};

vector 可以包含 3、4 或 5 个元素。这是有保证的。

如果有 3 个项目,则下一阶段包含一系列 3 个嵌套的 for 循环(见下文)。具有 4 个元素的 vector 需要 4 个循环、5 -> 5 个循环等。只会有 3、4 或 5 个循环。

我必须省略一些代码,但循环内的逻辑最终是将 double 相乘并计算最小值。因此,最内层循环需要访问先前循环中的局部变量。

for(const auto& x : vec[0].m_container)
{
const double some_calc = some_func(x);

for(const auto& y : vec[1].m_container)
{
const double some_calc_2 = some_func(y);

for(const auto& z : vec[2].m_container)
{
const double some_calc_3 = some_func(z);

// TODO need a way to generate 4th and 5th loops if required

// Logic processing data from the 3 loops
const double a_calculation = some_calc * some_calc_2 * some_calc_3;
double a_min = some_calc;
a_min = std::min(a_min, some_calc_2);
a_min = std::min(a_min, some_calc_3);
}
}
}

有没有一种方法可以根据 vector 的大小自动/生成这些嵌套的 FOR 循环?我正在考虑这样的模板:

if(struct.vec.size() == 3)
{
the_answer<3>(struct.vec);
}
else if(struct.vec.size() == 4)
{
the_answer<4>(struct.vec);
}
else
{
the_answer<5>(struct.vec);
}

最佳答案

大多数时候你可以用递归来解决这个问题。所以

void loop(int n,const vector<double>& vec, vector<double> outer_vars){
if (n!=vec.size()){
for(const auto& z : vec[n]){
outer_vars.push_back(some_func(z));
loop(n+1,vec,outer_vars);
}
}
}

关于C++ 生成可变数量的嵌套 FOR 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74091075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com