我需要创建基于相同范围的名称。下面的xml数组表示一些范围
<array>
<range index="j" min="0" max="2" />
<range index="k" min="1" max="6" />
<range index = "l" min = "0" max = "1"/>
</array>并可推广到m,n,o等。
因此,我想要的是能够以如下所示的方式获得名称:
BASENAME__1_0 (均值j=0,k=1,l= 0) BASENAME__1_0 BASENAME__2_0 BASENAME__2_0
根据最大值和最小值,最后一个元素应该是
BASENAME_2_6_1 (均值j=2,k =6,l =1)
如何编写c++代码来获得这样的"basename“,而不受范围限制?
发布于 2019-07-17 07:24:20
generate函数接受两个参数:要探索的范围列表和树当前路径中的组合。如果范围列表为空,则打印组合。如果列表不是空的,则探索第一个范围(通过范围上的for循环),并为每种可能性调用递归函数。
#include <vector>
#include <iostream>
struct range {
int lo, hi;
};
using ranges = std::vector<range>;
using state = std::vector<int>;
void generate(ranges rs, state s={}) {
if (rs.empty()) {
for (auto i : s) {
std::cout << i << " ";
}
std::cout << std::endl;
} else {
range first = rs[0];
rs.erase(begin(rs));
s.push_back(0);
for (int i = first.lo; i <= first.hi; i++) {
s.back() = i;
generate(rs, s);
}
}
}
int main() {
range j {0, 2};
range k {1, 6};
range l {0, 1};
generate({j,k,l});
}https://stackoverflow.com/questions/57070248
复制相似问题