c++ - 如何根据范围创建名称

标签 c++

我需要根据相同的范围创建名称。我有下面的 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/

相关文章:

c++ - 为什么 msvc 让我这样做而不是 gcc/g++?

c++ - 与 Java 无关的 list 文件是什么?

c++ - 在 int main() 中使用类函数

c++ - 为什么指针没有隐式转换为 <type> const*const

c++ - 连接Broadcom设备解析云

c++ - 调用 CudaFree 时多线程 CPU CUDA 应用程序不是异步的

c++ - 用 C++ 模板替换函数调用的 C 宏?

c++ - 如何在 std::vector 中找到项目的位置

c++ - 用于播放跟踪器音乐的跨平台开源 C 或 C++ 库

c++ - 将参数从 boost 程序选项导出到 doxygen