我需要根据相同的范围创建名称。我有下面的 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_0_1_0 (means j = 0 , k = 1 , l= 0)
BASENAME_0_1_0
BASENAME_0_2_0
BASENAME_0_2_0
根据最大值和最小值,最后一个元素应该是
BASENAME_2_6_1 (means j = 2 , k =6 , l =1)
我怎样才能编写 C++ 代码来获得像这样独立于范围限制的“basename”?
最佳答案
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});
}
关于c++ - 如何根据范围创建名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57070248/