4

我可以通过执行以下操作创建一个 2D 数组n*mvector< vector< int > > foo(n, vector< int > (m))

假设在运行时我得到了可变数量的值,例如v_1, v_2, v_3, ..., v_k并想要创建以下内容:

vector< vector< ... vector< int > ... > > foo(v_1, vector< ... > (v_2, vector< ... > ..));

换句话说,创建一个 size 的多维数组v_1* v_2 * v_3 ... *v_k。我怎样才能做到这一点?这可能吗?

4

2 回答 2

5

你需要boost::variant,它可以处理这个。您可以创建一个 recursive_wrapper 允许您任意嵌套内容。还有其他方法,例如一个大尺寸的单个平面数组,或者您可以使用继承和动态分配,但它们涉及更多麻烦。

typedef boost::variant<
    int,
    std::vector<boost::recursive_variant_>
> variant;

int main() {
    std::vector<variant> var; // Assume at least 1 dimension
}
于 2013-01-26T13:33:12.357 回答
4

你不能这样做——数据类型必须在编译时设置。也就是说,使用具有正确元素总数的单个数组并创建一个映射以便[i1][i2][...]在 say 中找到您的逻辑是非常实用的[i1*v2*v3...vk + i2*v3..vk + ...]

于 2013-01-26T13:28:39.740 回答