У меня есть два метода:
template <class T>
Matrix<T>::Matrix(int rows, int cols, T* data)
{
this->nRows = rows;
this->nCols = cols;
for (int i=0; i < nRows; i++)
{
vector<T> col(nCols);
for(int j=0;j<nCols;j++)
col[j]=*(data+i*nCols+j);
m.push_back(col);
}
}
А для печати матрица:
template <class T>
void Matrix<T>::Dump(void)
{
cout << "\t[\n";
for (int row=0; row<nRows; row++)
{
for (int col=0; col<nCols; col++)
cout << "\t\t" << m[row][col] << " ";
cout << "\n";
}
cout << "\t]\n";
}
И контрольный пример:
int M[]={1,2,3,3,4,7,2,5,8};
Matrix<int> m(3,3,M);
m.Dump();
Сценарии (в конструкторе):
for(int j=0;j<nCols;j++)
{
T val(*(data+i*nCols+j));
col.push_back(val) ;
cout<<col[j];
}
Все выходные данные равны 0.
Но
for(int j=0;j<nCols;j++)
{
T val(*(data+i*nCols+j));
col[j]=val ;
cout<<col[j];
}
Дает правильный результат.
Пожалуйста, объясните, почему откат ведет себя по-разному в обоих случаях?