Вы должны изменить реализацию Array1D
на:
class Array1D
{
public:
Array1D(vector<T>& a):temp(a) {}
T& operator[](int a)
{
return temp[a];
}
vector<T>& temp;
};
без этого, каждый раз, когда вы вызываете operator[]
для матрицы, вы получаете доступ к временному вектору. Следовательно, каждый вызов n[0]
работает на разных векторах. Таким образом, любые предыдущие изменения не могут быть сохранены, и вы всегда видите 0
в качестве результата.
С этим изменением вы получаете доступ к исходному вектору матрицы с помощью Array1D
прокси-класса.
Демо