Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的矩阵和向量模板类+; #包括 模板 类向量4{ std::array _a;//或'T _a[4];'? }; 模板 类Matrix4{ std::array _a;//或'T _a[16];'? //Vector4 row0;//或者我应该改用它吗 //Vector4 row1;//它使其他代码更容易,但是如何 //Vector4 row2;//我可以实现类似于 //Vector4 row3;//std::array::data()? };_C++_Arrays_Vector_Matrix - Fatal编程技术网

C++ c+中的矩阵和向量模板类+; #包括 模板 类向量4{ std::array _a;//或'T _a[4];'? }; 模板 类Matrix4{ std::array _a;//或'T _a[16];'? //Vector4 row0;//或者我应该改用它吗 //Vector4 row1;//它使其他代码更容易,但是如何 //Vector4 row2;//我可以实现类似于 //Vector4 row3;//std::array::data()? };

C++ c+中的矩阵和向量模板类+; #包括 模板 类向量4{ std::array _a;//或'T _a[4];'? }; 模板 类Matrix4{ std::array _a;//或'T _a[16];'? //Vector4 row0;//或者我应该改用它吗 //Vector4 row1;//它使其他代码更容易,但是如何 //Vector4 row2;//我可以实现类似于 //Vector4 row3;//std::array::data()? };,c++,arrays,vector,matrix,C++,Arrays,Vector,Matrix,谢谢 编辑:是它的三维游戏编程。。。因此,我需要的比boost matrix能够提供的更多,比如旋转、平移和反转等等。我认为您不会想要std::array\u a[4],因为您将用它创建4个数组。已经有了一个标准的std::vector类。如果您需要线性代数方面的专门知识,我建议您研究boost ublas。您希望的方法是 #include <array> template <typename T> class Vector4<T> { std::a

谢谢


编辑:是它的三维游戏编程。。。因此,我需要的比boost matrix能够提供的更多,比如旋转、平移和反转等等。

我认为您不会想要std::array\u a[4],因为您将用它创建4个数组。

已经有了一个标准的
std::vector
类。如果您需要线性代数方面的专门知识,我建议您研究boost ublas。

您希望的方法是

#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()?
};
std::vector my_矩阵(4,std::vector(4));
但是,如果您想处理矩阵,我宁愿使用boost的ublas:

std::vector<std::vector<int> > my_matrix(4, std::vector<int>(4));
#包括
#包括
int main(){
使用名称空间boost::numeric::ublas;
矩阵m(3,3);
对于(无符号i=0;istd::coutBoost ublas是一个很棒的库,但是如果您只想使用4-D的东西,它就没有经过优化。我建议保持这两个类的独立性:

#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;
}
模板
类向量4{
T_a[4];
};
模板
类Matrix4{
T_m[4][4];
};

您始终可以将指针强制转换为一行(
\u m[i]
)若要得到一个列向量,尽管需要一个像UBLAS使用的适配器类。

< p>我发现是C++线性代数库中最直接的,它包含固定和可变维向量和矩阵的模板。因此,没有需要构建/包含的LIB,但我发现它比Boost的ublas更完整,性能也更高。

vector默认情况下在堆上分配数据,对于固定大小的vector/Matrix这样的小数据对象来说,这不是一个好选择。一定要在代码块之外编写问题,很难看到您实际上在问什么g、 嗯,ublas是一个线性代数库。所以它是为矩阵积之类的运算而设计的。旋转、平移只不过是矩阵积。所以如果你想这样做,我强烈建议你去ublas。实际上,尽管我没有做过任何测试,但在编译时知道矩阵的大小可以帮助编译器优化ze.Game不需要通用的运行时大小的矩阵。当他只对4x4矩阵感兴趣时,我不建议使用动态分配的矩阵……事实上,如果编译器知道在编译时处理的矩阵的大小,它将能够更好地优化。我会使用
std::/boost::array
。为什么不制作matr英伟达从向量数组而不是抛出?我也想知道…NVIDIA SDK矩阵类也使用T [M 16 ]而不是T*M(4)〔4〕。
template <typename T>
class Vector4<T> {
    T _a[4];
};

template <typename T>
class Matrix4<T> {
    T _m[4][4];
};