我需要根据相同范围创建名称。我下面的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(表示j = 0,k = 1,l = 0)
BASENAME_0_1_0
BASENAME_0_2_0
BASENAME_0_2_0
根据最大值和最小值,最后一个元素应该是
BASENAME_2_6_1(意味着j = 2,k = 6,l = 1)
我如何编写c ++代码以独立于范围限制来获得这样的“基本名称”?
答案 0 :(得分:2)
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});
}