gpt4 book ai didi

C++矩阵类模板

转载 作者:行者123 更新时间:2023-11-30 03:01:45 28 4
gpt4 key购买 nike

我正在编写一个矩阵模板类,我遇到的问题是创建了数组并填充了值,但是当我使用 print() 函数时,数组再次为空。谁能指出我做错了什么?

数据定义如下:

T **data; 


template<class T>
CMatrix<T>::CMatrix( int rows, int cols)
{
setRow(rows);
setCol(cols);

data = new int*[rows];
// Create matrix with dimensions given

for (int i = 0; i < row; i++) {
data[i] = new int [cols];
}

for(int i = 0; i < row; i++) {
for(int j = 0; j < cols; j++) {
data[i][j] = (int) i * j;
}
}
}


template<class T>
void CMatrix<T>::print()
{
int i,j;

for (i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%.1f ",data[i][j]);
}
printf("\n");
}
}

主要功能:

int main (){    

int rows =4;
int cols = 4;

CMatrix<int>* matrixOne= new CMatrix<int>(rows, cols);
matrixOne->print();

return(0);
}

模板声明:

template<class T> 
class CMatrix

{
private:
int row; // number of rows
int column; // number of columns

public:

CMatrix(int rows, int cols);

CMatrix(const CMatrix& data); //Copy constructor

//Constructor taking an array of 16 elements
CMatrix(T Matrix[16]);
~CMatrix();

T **data;
void setRow(int r);
void setCol(int c);
int getRow();
int getCol();

//Subscript operators
T& operator()(int row, int col);
T operator()(int row, int col) const;
void print();



};

最佳答案

我会确保您在类中使用数据变量以及行和列变量。这绝不是最完整的版本,但它编译和运行良好。

还要确保在构造函数中使用“T”而不是“int”。查看评论。

请注意打印函数中有关使用行和列而不是对值进行硬编码的两条注释。

#ifndef CMATRIX_H
#define CMATRIX_H

#include <stdio.h>

template <class T>
class CMatrix
{
public:
CMatrix( int rows, int cols)
{
setRow(rows);
setCol(cols);

data = new T*[rows]; // replaced "int" for "T"

for (int i = 0; i < row; i++) {
data[i] = new T [cols]; // replaced "int" for "T"
}

for(int i = 0; i < row; i++) {
for(int j = 0; j < cols; j++) {
data[i][j] = (T) i * j; // replaced "int" for "T"
}
}
}

void print();
void setRow(int r){row = r;}
void setCol(int c){col = c;}
T& operator()(int row, int col);
private:
T **data;
int row,col;
};

template <class T>
void CMatrix<T>::print ()
{
int i,j;

for (i=0;i < row;i++) // Here you used to have row hard coded to 4
{
for(j=0;j < col;j++) // Here you used to have col hard coded to 4
{
printf("%.1f ",(float) data[i][j]);
}
printf("\n");
}
}

// Recently added
template<class T> T& CMatrix<T>::operator()(int row, int col)
{
return data[row][col];
}

#endif // CMATRIX_H

这是主要的。

#include "cmatrix.h"
#include <iostream>

int main(int argc, char *argv[])
{
CMatrix <float> m(4,4);

m.print();

// Recently added
std::cout << m(1,1);

return 0;
}

关于C++矩阵类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764961/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com