9.7 (C++)

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;
}
支持 makedown语法