在C ++中创建可变数量的向量

时间:2013-01-26 13:19:17

标签: c++ vector

我可以通过以下方式创建一个大小为n*m的2D数组: vector< 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< ... > ..));

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

2 个答案:

答案 0 :(得分:4)

您无法执行此操作 - 必须在编译时设置数据类型。也就是说,使用具有正确元素总数的单个数组是非常实际的,并创建一个映射,以便在[i1][i2][...]处找到您的逻辑[i1*v2*v3...vk + i2*v3..vk + ...]

答案 1 :(得分:4)

您需要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
}