【发布时间】:2015-12-24 11:12:40
【问题描述】:
嘿,我是计算机科学专业的学生, 我们被要求使用向量类构建一个通用矩阵,我们根本不允许使用“new”和“delete”。 我不知道如何正确启动它我们可以使用这些库:
卡带
矢量
cstdlib
cmath
我在网上找遍了,但没有找到一个使用向量作为矩阵的类(矩阵的索引是mat[i*cols+j])并且不使用new和delete函数或分配内存:
我们应该检查的示例:(int google test)
“矩阵.hpp”
template < class T ><class T> class Matrix {
private:
int rows;
int cols;
vector< T > mat;
public:
Matrix(int row, int col,const T& mat2):rows(row),cols(col) {
mat.resize(rows*cols);
//?
};
Matrix(int row, int col);
virtual ~Matrix();
Matrix(const Matrix< T >& rhs);
Matrix< T > transpose();
Matrix< T >& operator=(const Matrix< T >& rhs);
bool operator==(const Matrix< T >& rhs)const;
const int getRowNum() const;
const int getColNum() const;
Matrix< T >& operator+(const Matrix< T >& rhs);
};
"gtest/gtest.h"
Matrix<int> mat1(1, 1, std::vector<int>(1,2));
EXPECT_EQ(1, mat1.getRowNum());
EXPECT_EQ(1, mat1.getColNum());
int t= 0;
EXPECT_TRUE(mat1.hasTrace(t));
EXPECT_TRUE(mat1.isSquareMatrix());
Matrix<int> transpose_mat= mat1;
EXPECT_EQ(transpose_mat, mat1.transpose());
Matrix<int> mat2(1, 1, std::vector<int>(1,3));
Matrix<int> add_mat(1, 1, std::vector<int> (1,5));
EXPECT_EQ(add_mat, mat1+mat2);
Matrix<int> multi_mat(1, 1, std::vector<int>(1,6));
EXPECT_EQ(multi_mat, mat1*mat2);
Matrix<int> scalar_multi_mat(1, 1, std::vector<int>(1,4));
EXPECT_EQ(scalar_multi_mat, mat1*2);
这是我们应该做的:
Matrix 接口:必须定义并实现泛型类文件Matrix.hpp Matrix。矩阵将是通用的,四肢不一定是整数,而是通用类型数字。出于尽职调查的目的,你们松鼠有权假设运营商将进行上述必要的锻炼。您也可以假设松鼠用于相对于矩阵的其余部分,使得连接或两次的原子步骤的顺序)长链计算(没关系。例如(a + b)+ c = = a + (b + c) 给出了可以使用默认语言的练习或函数),当然都是通用的(:
- 没有参数的构造函数。构建器构建一个 1x1 矩阵,其中器官执行 T,其中 T 是存储在矩阵中的类型。
- 构造函数获取行数、列数和用矩阵填充的值的向量)看到驱动调用这个构造函数没有实现,部门结构应该让default足够好李>
- (Constructor Copy)复制构造函数(不同的矩阵接收器)没有实现,该部门应该结构化,以便默认足够好
- (赋值操作符)没意识到,必须建立部门,以便默认足够好
- 连接矩阵的加号 (+) 运算符。
- 乘法 (*) 运算符矩阵乘法。它做函数的对象的矩阵是左矩阵乘法。
- (交换函数矩阵)转置
- (Aqaba 函数) HasTrace(引用器官接受者泛型类型和任务其中的trace 值(如果有)的矩阵并返回一个布尔值:如果是方阵则为true,而另一种为false 的情况则放价值附加身份机构收到关于.reference的信息
- 上面的四个函数)connection、transpose和HasTrace double(不是从它被应用的对象函数。另外,你可以根据你认为对部门有用的,添加更多的public函数或者Privacy期望。李>
如果有人可以帮助我,我将不胜感激!
【问题讨论】:
-
鉴于大多数矩阵不会调整大小,动态分配似乎很愚蠢。
-
我们使用 std::vector 或 std::list 仅此而已,贴在我到目前为止所做的下面,但我不知道如何继续,例如我们需要使用副本构造函数是默认的,这是什么意思?
-
@CoffeeandCode,并非所有矩阵都是 3D 图形中使用的固定 3x3 或 4x4 矩阵。矩阵用于视频游戏以外的许多学科。你怎么知道矩阵维度和数据不是从磁盘加载的?