在 C++ 中(有或没有 boost),我如何创建一个 N 维 vector ,其中 N 在运行时确定?
类似的东西:
PROCEDURE buildNVectors(int n)
std::vector < n dimensional std::vector > *structure = new std::vector< n dimensional std::vector >()
END
如果传递 1,将分配一个 vector 。如果传递 2,将分配一个 2d 嵌套矩阵。如果传递 3,则分配一个 3d 立方体。等
最佳答案
很遗憾,您将无法执行此操作。 std::vector
是一种模板类型,因此它的类型必须在编译时已知。由于它的类型用于确定它具有的维度,因此您只能在编译时设置它。
好消息是您可以创建自己的类,使用单维 vector 作为数据存储,然后您可以使用数学假装它具有额外的维度。但是,这确实使访问 vector 变得棘手。由于您不知道 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
关于运行时的 C++ N 嵌套 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43358369/