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

C++ 在C+中创建数量可变的向量+;,c++,vector,C++,Vector,我可以通过执行以下操作创建大小为n*m的二维数组: vectorfoo(n,vector(m)) 假设在运行时给我一个可变数量的值, e、 g.v_1,v_2,v_3,…,v_k并希望创建以下内容: vectorfoo(v_1,向量(v_2,向量) 换句话说,创建一个大小为v_1*v_2*v_3的多维数组*v_k。我该怎么做?这可能吗?您不能这样做-必须在编译时设置数据类型。也就是说,使用一个元素总数正确的数组,并创建一个映射,以便您的逻辑[i1][i2][…]可以在say[i1*v2*v3…v

我可以通过执行以下操作创建大小为
n*m
的二维数组:
vector>foo(n,vector(m))

假设在运行时给我一个可变数量的值, e、 g.
v_1,v_2,v_3,…,v_k
并希望创建以下内容:

vector…>>foo(v_1,向量<…>(v_2,向量<…>)


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

您不能这样做-必须在编译时设置数据类型。也就是说,使用一个元素总数正确的数组,并创建一个映射,以便您的逻辑
[i1][i2][…]
可以在say
[i1*v2*v3…vk+i2*v3..vk+…]找到,这可以处理此问题。您可以创建一个递归的_包装器,允许您任意嵌套内容。还有其他的方法,比如一个大尺寸的平面数组,或者您可以使用继承和动态分配,但是它们涉及到更多的麻烦

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

int main() {
    std::vector<variant> var; // Assume at least 1 dimension
}
typedef boost::variant<
int,
向量
>变体;
int main(){
std::vector var;//假设至少有一个维度
}

就我所知,没有办法做你想做的事。因为在编译过程中必须知道嵌套的深度。但在我看来,这似乎是一个XY问题。你的问题是X,你认为Y是解决方案,所以你问的是Y而不是X。@StoryTeller这是真的,但我发现了如何用另一种方式解决
X
。我只是想看看是否有可能用
Y
来解决这个问题。我误解了原来的问题——是的,我认为没有任何(琐碎的)方法可以做到这一点。下面是Tony D的解决方案,这正是我要建议的——但很快就会变得非常尴尬和复杂。哦,好吧+1比有趣的问题:)每个向量都是一个类型。在编译时,使用可变模板(例如,
MyData
会产生一个有效的三层nexted向量向量向量),您所要求的几乎是微不足道的。对于在构造时带有可变参数的运行时来说,它稍微复杂一些。(例如,
MyData(10,20,30)
)。但是,在运行时使用变量维度列表作为参数列表来完成这一切将是非常重要的(但如果做了足够多的工作,仍然是可行的)。然而,它不会像一个
向量>
普通格式。+1这正是我过去所做的。支持的“索引器”剥离每个
[]
操作符并返回另一个索引器,直到到达最终维度,这是最难的部分(如果具有
ar[i1][i2][i3]…[iN]
对您很重要。如果没有,并且可以接受常规函数接口,这在少量代码中是非常可行的)。回答得好,顺便说一句。