Define the Tensor class.
难题 (参考答案约130行)
输入的第1行是维数
输入的第2行是各维的大小
后面是矩阵中的元素
输入
3
2 2 2
9.2 1.7
3.2 5.2
9.5 7.7
5.7 3.1
4
2 2 4 2
4.9 2.9
8.2 1.8
3.6 2.9
8.1 4.1
2.5 4.3
6.3 4.4
4.7 5.3
4.1 7.0
1.5 3.6
7.4 5.0
1.9 8.2
1.5 8.9
8.1 3.8
6.3 4.0
6.3 5.0
8.2 6.8
输出
3
2 2 2
9.2 1.7
3.2 5.2
9.5 7.7
5.7 3.1
4
2 2 4 2
4.9 2.9
8.2 1.8
3.6 2.9
8.1 4.1
2.5 4.3
6.3 4.4
4.7 5.3
4.1 7
1.5 3.6
7.4 5
1.9 8.2
1.5 8.9
8.1 3.8
6.3 4
6.3 5
8.2 6.8
主程序 (不能修改)
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;
#include "source.cpp"
int main() {
Tensor t3;
cin >> t3;
cout << t3 << endl;
Tensor t4;
cin >> t4;
cout << t4 << endl;
}
zhc的答案
class Tensor{
private:
int dimension ;
int size[5]={0} ;
double data[100]={0} ;
void _init(int a,int sssize[] ,double dddata[] ) {
this->dimension = a ;
// this->size = new int[dimension];
for (int i = 0; i < dimension ; ++ i){
this->size[i] = (sssize == NULL ? 0 : sssize[i]);
}
// this->data = new double[l] ;
for (int i = 0; i < this->sizes() ; ++ i){
this->data[i] = (dddata == NULL ? 0 : dddata[i]);
}
}
public:
int sizes(){
int t=1;
for (int i = 0; i < dimension ; ++ i){
t*=size[i] ;
}
return t ;
}
Tensor(){
this->_init(1,NULL,NULL);
}
Tensor(int a,int ssize[] ,double ddata[] ){
this->_init(a,ssize,ddata);
}
Tensor( Tensor& t){
this->_init( t.dimension , t.size , t.data) ;
}
~Tensor(){
// delete [] this->size ;
// delete [] this->data ;
}
friend ostream & operator<<( ostream & os,const Tensor & t);
friend istream & operator>>( istream & is,Tensor & t) ;
};
ostream & operator<<( ostream & os,const Tensor & t)
{
os << t.dimension <<endl ;
for (int i = 0; i < t.dimension ; ++ i) {
os << t.size[i] <<" " ;
}
os<<endl <<endl ;
int l=1;
for (int i = 0; i < t.dimension ; ++ i){
l*=t.size[i] ;
}
for (int i = 0; i < l ; ++ i) {
os << t.data[i] << " " ;
if((i+1)%(t.size[t.dimension-1]* t.size[t.dimension-2]) == 0) cout<<endl ;
if((i+1)%(t.size[t.dimension-1] )== 0 ) cout << endl ;
}
return os;
}
istream & operator>>( istream & is,Tensor & t)
{
is>>t.dimension;
for (int i = 0; i < t.dimension ; ++ i) {
is >> t.size[i] ;
}
for (int i = 0; i < t.sizes() ; ++ i) {
is >> t.data[i] ;
}
return is;
}