C ++ N运行时的嵌套向量

时间:2017-04-12 00:35:53

标签: c++ arrays vector boost nested

在C ++中(有或没有boost),如何创建N维向量,其中N是在运行时确定的?

有些事情:

PROCEDURE buildNVectors(int n)

std::vector < n dimensional std::vector > *structure = new std::vector< n dimensional std::vector >()

END

如果传递1,将分配一个向量。如果传递2,则将分配2d嵌套矩阵。如果传递3,则分配3d立方体。等

1 个答案:

答案 0 :(得分:3)

很遗憾,你无法做到这一点。 std::vector是模板类型,因此在编译时必须知道它的类型。由于它的类型用于确定它具有的维度,因此只能在编译时设置它。

好消息是,您可以创建自己的类,使用单维向量作为数据存储,然后您可以使用数学伪造它有额外的维度。这确实使得访问向量变得棘手。由于您不知道向量有多少维度,因此您需要有一种方法来索引具有任意数量元素的容器。您可以做的是使用std::intializer_list重载函数调用操作符操作符,这将允许您使用类似

的内容索引它
my_fancy_dynamic_dimension_vector({x,y,z,a,b,c});

你可以拥有的真实草图

class dynmic_vector
{
    std::vector<int> data;
    int multiply(std::initializer_list<int> dims)
    {
        int sum = 1;
        for (auto e : dims)
            sum *= e;
        return sum;
    }
public:
    dynmic_vector(std::initializer_list<int> dims) : data(multiply(dims)) {}
    int & operator()(std::initializer_list<int> indexs)
    {
        // code here to translate the values in indexes into a 1d position
    }
};

或者更好的是,只需使用boost::multi_array