我知道我可以或应该使用3d数组,但如果我想用矢量,我该怎么办?
我知道如何使用向量向量来完成它,但我无法获得正确的泛化语法。
应该可以。
编辑:
我实际上是自己想出来的:
vector< vector< vector<double> > > the_vector(SIZE1, vector< vector<double>> (SIZE2,vector<double>(SIZE3,0)));
用于SIZE1 x SIZE2 x SIZE3载体
谢谢。
答案 0 :(得分:4)
你可以做到
std::vector<std::vector<std::vector<double>>> v;
如果要在编译时概括维数,可以创建递归模板:
template<int n, typename T>
struct nvect;
template<typename T>
struct nvect<1, T> {
std::vector<T> data;
};
template<int n, typename T>
struct nvect {
std::vector<nvect<n-1, T> > data;
};
用于例如
nvect<3, double> x;
使用C ++ 11和可变参数模板,您还可以轻松创建一个具有您要求的一些属性的n维固定矩阵:
template<typename T, int ...rest>
struct matrix;
template<typename T, int n>
struct matrix<T, n> {
T data[n];
matrix() {
for (int i=0; i<n; i++) {
data[i] = T(0);
}
}
T& operator[](int index) { return data[index]; }
};
template<typename T, int n, int ...rest>
struct matrix<T, n, rest...> {
matrix<T, rest...> data[n];
matrix<T, rest...>& operator[](int index) { return data[index]; }
};
template<typename T, int n, int ...rest>
matrix<T, rest...> *begin(matrix<T, n, rest...>& x) { return &x.data[0]; }
template<typename T, int n, int ...rest>
matrix<T, rest...> *end(matrix<T, n, rest...>& x) { return &x.data[n]; }
template<typename T, int n>
T *begin(matrix<T, n>& x) { return &x.data[0]; }
template<typename T, int n>
T *end(matrix<T, n>& x) { return &x.data[n]; }
这可以用作
int main() {
matrix<double, 10, 10> m;
for (int i=0; i<10; i++) {
m[i][i] = 1.0;
}
for (auto& row : m) {
for (auto& cell : row) {
std::cout << cell << " ";
}
std::cout << "\n";
}
return 0;
}
答案 1 :(得分:0)
你可以试试这个:
std::vector<std::vector<std::vector<double>>>
但我不确定你在找什么?