在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立方体。等
答案 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