#include <array>
template <typename T>
class Vector4<T> {
std::array<T, 4> _a; // or 'T _a[4];'?
};
template <typename T>
class Matrix4<T> {
std::array<T, 16> _a; // or 'T _a[16];'?
//Vector4<T> row0; // or should i use this instead
//Vector4<T> row1; // it makes other code easier but how
//Vector4<T> row2; // can i implement something like
//Vector4<T> row3; // std::array::data()?
};
感谢
编辑:你的3D游戏编程...所以我需要更多然后提升矩阵可以提供像旋转和平移和反转等...
答案 0 :(得分:4)
你想要的方式是
std::vector<std::vector<int> > my_matrix(4, std::vector<int>(4));
但是,如果你想处理matricies,我宁愿使用boost中的ublas:
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
using namespace boost::numeric::ublas;
matrix<double> m (3, 3);
for (unsigned i = 0; i < m.size1 (); ++ i)
for (unsigned j = 0; j < m.size2 (); ++ j)
m (i, j) = 3 * i + j;
std::cout << m << std::endl;
}
示例来自他们的网站http://www.boost.org/doc/libs/1_40_0/libs/numeric/ublas/doc/matrix.htm
答案 1 :(得分:3)
我发现Eigen是C ++线性代数库中最直接的,它包含固定和可变维度向量和矩阵的模板。像Boost一样,它是一个纯粹的模板“库”,因此没有构建/包含的库,但我发现它比Boost的ublas更完整,性能更高。
答案 2 :(得分:0)
我认为你不会想要std :: array _a [4],因为你将创建4个数组。
答案 3 :(得分:0)
已经有一个标准的std::vector
课程。如果你需要一些专门用于线性代数的东西,我建议你研究一下boost ublas。
答案 4 :(得分:0)
Boost ublas是一个很棒的库,但如果你想要的只是4-D的话,它就不会被优化。我建议让两个班级保持独立:
template <typename T>
class Vector4<T> {
T _a[4];
};
template <typename T>
class Matrix4<T> {
T _m[4][4];
};
您始终可以将指向行(_m[i]
)的指针投射到Vector4&lt;&gt;中。如果需要的话。要获得列向量,您需要一个像ublas一样的适配器类。