作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含元素 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/
我是一名优秀的程序员,十分优秀!