Задание:Создать шаблонный класс - двумерный динамический массив. Тип элементов массива определяется параметром шаблона. Предусмотреть функции для выполнения следующих операций: введение элементов в массив, создания копии массива по строкам, создания копии массива по столбцам, копирование выбранной строки или столбца, вывод массива на экран.
Есть проблема с копированием выбранной строки,почему-то при выводе,в скопированном массиве не выводится первый элемент,второй и третий-выводятся,а вот первый не хочет
Код:
/*Створити шаблонний клас – двовимірний динамічний масив.
Тип елементів масиву визначається параметром шаблона.
Передбачити функції для виконання таких операцій: введення елементів у масив,
створення копії масиву по рядках, створення копії масиву по стовпцях, копіювання
вибраного рядка або стовпця, виведення масиву на екран.*/
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
#define K 5
template <typename T>
class array
{
private:
int **p;
int size;
int row,column;
int mtx[K][K];
public:
array(int a,int b)
{
row=a;column=b;
//cout<<" a= "<<a;
p=new int *[a*b];
for(int i=0;i<(a*b);i++)
{
p[i]=new int[(a*b)];
}
/* for(int i=0;i<row;i++)
for( int j=0;j<column;j++)
{
p[i][j]=a*b;
cout<<" "<<p[i][j];
}*/
}
// ~array(){for(int i=0;i<row*column;i++) delete [] p[i]; };
void enter();
void copycolumn();
void copyrow();
void choose();
void show();
};
int main()
{
array <int> myArray(2,3);
cout << "Enter numbers for matrix: \n";
myArray.enter();
cout << "Matrix: \n";
myArray.show();
myArray.copycolumn();
myArray.copyrow();
myArray.choose();
}
template <typename T>
void array<T>::choose()
{
char str[10];
int n,m;
int **d=new int*[column*row];
for(int i=0;i<(column*row);i++)
{
d[i]=new int[column*row];
}
cout<<"What do you want to choose: column or row? (write word)\n";
a:cin>>str;
if(strcmp(str,"row")==0)
{
cout<<"row"<<row;
cout<<"\nEnter number of "<<str<<" ";
v:cin>>m;
if(m>row)
{
cout<<"It's number more than limit,enter one more time\n";
goto v;
}
int j=m;
for(int i=0;i<column;i++)
{
d[i]=p[i]; // проблема здесь,здесь копирую один массив в другой
cout<<" "<<d[j][i]; //например если я ввожу m=1,в качестве первого элемента выводит мусор
}
}
else if(strcmp(str,"column")==0)
{
cout<<"column";
cout<<"\nEnter number of "<<str<<" ";
b:cin>>n;
if(n>column)
{
cout<<"It's number more than limit,enter one more time\n";
goto b;
}
int j=n;
for(int i=0;i<row;i++)
{
d[i]=p[i];
cout<<d[i][j]<<" ";
cout<<"\n";
}
}
else if(1)
{
cout<<"Error,enter one more time\n";
goto a;
}
}
template <typename T>
void array<T>::copyrow()
{
cout<<"\n";
int **r=new int*[column*row];
for(int i=0;i<(column*row);i++)
{
r[i]=new int[column*row];
}
int j=0;
for(int i=0;i<column;i++)
{
r[i]=p[i];
cout<<r[j][i]<<" ";
//cout<<endl;
}
}
template <typename T>
void array<T>::copycolumn()
{
int **c=new int*[column*row];
for(int i=0;i<(column*row);i++)
{
c[i]=new int[column*row];
}
int j=0;
for(int i=0;i<row;i++)
{
c[i]=p[i];
cout<<c[i][j]<<" ";
cout<<"\n";
}
}
template <typename T>
void array<T>::enter()
{
for(int i=0;i<row;i++)
for( int j=0;j<column;j++)
{
cin>>p[i][j];
//cout<<" "<<p[i][j];
}
}
template <typename T>
void array<T>::show()
{
int temp;
for(int i=0;i<row;i++)
{
for(int j=0;j<column;j++)
cout<<p[i][j]<<" ";
cout<<"\n";
}
}