9.2 (C++)

Please write a class I

Example input:

100
10000
Example output:
100
10000
主程序 (不能修改)

#include <vector>
#include <iostream>
using namespace std;

class Tensor
{
    vector<int> sizes;
    vector<double> values;
    
    int _index(const vector<int> & indexes) const {
        int index = 0;
        for (int i = 0; i < this->sizes.size(); ++ i) {
            index *= sizes[i];
            index += indexes[i];
        }
        return index;
    }
    
public:
    int numel() const {
        if (this->sizes.size() == 0) return 0;
        int size = 1;
        for (int i = 0; i < this->sizes.size(); ++ i) size *= sizes[i];
        return size;
    }
    
    Tensor(vector<int> sizes) {
        this->sizes = sizes;
        this->values.resize(this->numel());
        for (int i = 0; i < this->numel(); ++ i) this->values[i] = 0;
    }
    
    double & get(const vector<int> & indexes) const {
        return values[this->_index(indexes)];
    }
};

#include "source.cpp"

int main() {
    I sizes(3,4,5);
    Tensor t(sizes);
    I index(0,0,3);
    cin >> t.get(index);
    cout << t.get(index) << endl;
    
    Tensor t2(I(2,3,4,5));
    cin >> t2.get(I(1,2,3,4));
    cout << t2.get(I(1,2,3,4)) << endl;
}

参考答案

class I
{
private:
    vector<int> data;
public:
I(int x1,int x2,int x3){
    data.push_back(x1);
    data.push_back(x2);
    data.push_back(x3);
}
I(int x1,int x2,int x3,int x4){
    data.push_back(x1);
    data.push_back(x2);
    data.push_back(x3);
    data.push_back(x4);
} 
operator vector<int>() {
    return data;
}
};
上一篇: 9.3 (C++) 下一篇: 9.5 (C++)
支持 makedown语法