【发布时间】:2021-02-07 10:38:28
【问题描述】:
我正在尝试实现一个自定义类,它使用向量的向量处理 n 维矩阵,概括 1d、2d 和 3d 定义:
using mat1dd = std::vector<double>;
using mat2dd = std::vector<mat1dd>;
using mat3dd = std::vector<mat2dd>;
这是我实现这个类的尝试。
template <std::size_t N_DIM, typename T>
class matnd {
std::vector<matnd<N_DIM - 1, T>> mat;
...
}
我的意图是,例如,
matnd<3, double> mat;
创建一个双精度的 3 维矩阵。
上面的递归定义显然失败了,因为它没有基本情况,所以N_DIM 只是无限地减少(直到编译器停止)。我怎样才能以不会遇到此问题的方式实现此类?
【问题讨论】:
-
我建议在引擎盖下使用一维向量。
-
@HolyBlackCat 您能否详细说明您的意思?我不明白你的建议。
-
只是
std::vector<T> mat;。例如。如果您有一个大小为 3x4 的二维矩阵,则向量的大小为 3*4=12。 -
@HolyBlackCat 哦,我现在了解你了。这不会使一些操作变得有点复杂吗?
-
不。您只需要编写一个函数来将 N 维坐标转换为此类向量中的位置,其他一切都相同。
标签: c++ matrix linear-algebra n-dimensional