need to valgrind
This commit is contained in:
@@ -14,7 +14,27 @@ using namespace std;
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
Matrix m1(2,2);
|
int rows, cols;
|
||||||
|
cout << "Enter the number of rows in the test matrix: " << endl;
|
||||||
|
cin >> rows;
|
||||||
|
cout << "Enter the number of columns in the test matrix: " << endl;
|
||||||
|
cin >> cols;
|
||||||
|
Matrix m1(rows,cols);
|
||||||
// add more tests
|
// add more tests
|
||||||
|
for(int i = 0; i < rows; i++){
|
||||||
|
for(int j = 0; j < cols; j++){
|
||||||
|
m1[i][j] = 4.268394 + (i+7)*(j+7);
|
||||||
|
}
|
||||||
|
m1[0][0] = 4.20;
|
||||||
|
m1[0][1] = 6.9;
|
||||||
|
m1[0][2] = 1.337;
|
||||||
|
m1[0][3] = 12.18;
|
||||||
|
|
||||||
|
}
|
||||||
|
cout << m1 << endl;
|
||||||
|
m1*5;
|
||||||
|
cout << m1 << endl;
|
||||||
|
m1.clear();
|
||||||
|
cout << m1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ Matrix::Matrix(unsigned int rows, unsigned int cols){
|
|||||||
this->cols = cols;
|
this->cols = cols;
|
||||||
// Create the row pointer
|
// Create the row pointer
|
||||||
this->the_matrix = new Row*[rows];
|
this->the_matrix = new Row*[rows];
|
||||||
for(int i = 0; i < rows; i++){
|
for(int i = 0; i < rows+1; i++){
|
||||||
// Assign the rows of the matrix to new memory
|
// Assign the rows of the matrix to new memory
|
||||||
this->the_matrix[i] = new Row(cols);
|
this->the_matrix[i] = new Row(cols);
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ Matrix::Matrix(const Matrix& from){
|
|||||||
this->cols = from.cols;
|
this->cols = from.cols;
|
||||||
// Create the row pointer with new row amount
|
// Create the row pointer with new row amount
|
||||||
this->the_matrix = new Row*[rows];
|
this->the_matrix = new Row*[rows];
|
||||||
for(int i = 0; i < this->rows; i++){
|
for(int i = 0; i < rows+1; i++){
|
||||||
// Set the pointer to each copied row
|
// Set the pointer to each copied row
|
||||||
the_matrix[i] = new Row(from[i]);
|
the_matrix[i] = new Row(from[i]);
|
||||||
}
|
}
|
||||||
@@ -48,7 +48,7 @@ Matrix::Matrix(const Matrix& from){
|
|||||||
// Destructor
|
// Destructor
|
||||||
Matrix::~Matrix(){
|
Matrix::~Matrix(){
|
||||||
// Explicitly calls the destructor for each row in the matrix
|
// Explicitly calls the destructor for each row in the matrix
|
||||||
for(int i = 0; i < rows; i++) {
|
for(int i = 0; i < rows+1; i++) {
|
||||||
the_matrix[i]->~Row();
|
the_matrix[i]->~Row();
|
||||||
}
|
}
|
||||||
// Deletes the matrix itself
|
// Deletes the matrix itself
|
||||||
@@ -95,12 +95,11 @@ Matrix Matrix::operator*(const Matrix& rhs) const{
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scalar multiplication - TODO
|
// Scalar multiplication
|
||||||
Matrix Matrix::operator*(const double scale) const{
|
Matrix Matrix::operator*(const double scale) const{
|
||||||
for(int i = 0; i < rows; i++){
|
for(int i = 0; i < rows; i++){
|
||||||
for(int j = 0; j < cols; j++){
|
for(int j = 0; j < cols; j++){
|
||||||
double temp = (*the_matrix[i])[j]*scale;
|
(*the_matrix[i])[j] = (*the_matrix[i])[j]*scale;
|
||||||
(*the_matrix[i])[j] = temp;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Matrix result(this->rows, this->cols);
|
Matrix result(this->rows, this->cols);
|
||||||
@@ -117,7 +116,7 @@ Matrix Matrix::operator~() const{
|
|||||||
|
|
||||||
// Clear Matrix
|
// Clear Matrix
|
||||||
void Matrix::clear(){
|
void Matrix::clear(){
|
||||||
for(int i = 0; i < rows ; i++) {
|
for(int i = 0; i < rows+1; i++) {
|
||||||
the_matrix[i]->clear();
|
the_matrix[i]->clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -125,7 +124,7 @@ void Matrix::clear(){
|
|||||||
// Access Operators - non-const
|
// Access Operators - non-const
|
||||||
Row& Matrix::operator[](unsigned int row){
|
Row& Matrix::operator[](unsigned int row){
|
||||||
// Ensure the row is in range
|
// Ensure the row is in range
|
||||||
if(row >= rows){
|
if(row > rows){
|
||||||
throw(out_of_range("Row is out of range"));
|
throw(out_of_range("Row is out of range"));
|
||||||
}
|
}
|
||||||
return *(the_matrix[row]);
|
return *(the_matrix[row]);
|
||||||
@@ -134,7 +133,7 @@ Row& Matrix::operator[](unsigned int row){
|
|||||||
// Access Operators - const
|
// Access Operators - const
|
||||||
const Row& Matrix::operator[](unsigned int row) const{
|
const Row& Matrix::operator[](unsigned int row) const{
|
||||||
// Ensure the row is in range
|
// Ensure the row is in range
|
||||||
if(row >= rows){
|
if(row > rows){
|
||||||
throw(out_of_range("Row is out of range"));
|
throw(out_of_range("Row is out of range"));
|
||||||
}
|
}
|
||||||
return *(the_matrix[row]);
|
return *(the_matrix[row]);
|
||||||
@@ -143,11 +142,28 @@ const Row& Matrix::operator[](unsigned int row) const{
|
|||||||
// print to output stream - TODO
|
// print to output stream - TODO
|
||||||
void Matrix::out(std::ostream& os) const{
|
void Matrix::out(std::ostream& os) const{
|
||||||
os << setprecision(4);
|
os << setprecision(4);
|
||||||
os << setw(10);
|
os << "[";
|
||||||
|
for(int i = 0; i < rows; i++) {
|
||||||
|
if(i != 0){
|
||||||
|
cout << " ";
|
||||||
|
}
|
||||||
|
os << "[ ";
|
||||||
|
for(int j = 0; j < cols; j++) {
|
||||||
|
os << (*the_matrix[i])[j];
|
||||||
|
if(j != cols-1){
|
||||||
|
os << ", ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os << " ]";
|
||||||
|
if(i != rows-1){
|
||||||
|
os << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
os << "]" << endl;
|
||||||
// finish
|
// finish
|
||||||
}
|
}
|
||||||
|
|
||||||
// global insertion operator - TODO
|
// global insertion operator
|
||||||
std::ostream& operator<<(std::ostream& os, const Matrix& rhs){
|
std::ostream& operator<<(std::ostream& os, const Matrix& rhs){
|
||||||
rhs.out(os);
|
rhs.out(os);
|
||||||
return os;
|
return os;
|
||||||
|
|||||||
Reference in New Issue
Block a user