#include <iostream>
#include <vector>
using namespace std;
template <class T>
class matrix {
protected:
unsigned long width;
unsigned long height;
vector<vector<T>> v;
public:
matrix(unsigned long val_height, unsigned long val_width) :
height(val_height),
width(val_width),
v(vector<vector<T>>(height, vector<T>(width, 0))) // так
{
//или вместо инициализации
//v.resize(height, vector<T>(width, 0));
}
~matrix() {
// у vector свой деструктор, который автоматически освободит память
}
template <class U>
friend ostream &operator << (ostream &s, const matrix<U> &m);
};
template <class T>
ostream &operator << (ostream &s, const matrix<T> &m) {
for (int i = 0; i < m.height; i++) {
for (int j = 0; j < m.width; j++) {
s << m.v[i][j];
}
s << endl;
}
return s;
}
int main() {
matrix<int> a(2, 2);
cout << a;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIG1hdHJpeCB7CnByb3RlY3RlZDoKCXVuc2lnbmVkIGxvbmcgd2lkdGg7Cgl1bnNpZ25lZCBsb25nIGhlaWdodDsKCXZlY3Rvcjx2ZWN0b3I8VD4+IHY7CnB1YmxpYzoKCW1hdHJpeCh1bnNpZ25lZCBsb25nIHZhbF9oZWlnaHQsIHVuc2lnbmVkIGxvbmcgdmFsX3dpZHRoKSA6CgkJaGVpZ2h0KHZhbF9oZWlnaHQpLAoJCXdpZHRoKHZhbF93aWR0aCksCgkJdih2ZWN0b3I8dmVjdG9yPFQ+PihoZWlnaHQsIHZlY3RvcjxUPih3aWR0aCwgMCkpKSAvLyDRgtCw0LoKCXsKCQkvL9C40LvQuCDQstC80LXRgdGC0L4g0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40LgKCQkvL3YucmVzaXplKGhlaWdodCwgdmVjdG9yPFQ+KHdpZHRoLCAwKSk7Cgl9CgoJfm1hdHJpeCgpIHsKCQkvLyDRgyB2ZWN0b3Ig0YHQstC+0Lkg0LTQtdGB0YLRgNGD0LrRgtC+0YAsINC60L7RgtC+0YDRi9C5INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INC+0YHQstC+0LHQvtC00LjRgiDQv9Cw0LzRj9GC0YwKCX0KCgl0ZW1wbGF0ZSA8Y2xhc3MgVT4KCWZyaWVuZCBvc3RyZWFtICZvcGVyYXRvciA8PCAob3N0cmVhbSAmcywgY29uc3QgbWF0cml4PFU+ICZtKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpvc3RyZWFtICZvcGVyYXRvciA8PCAob3N0cmVhbSAmcywgY29uc3QgbWF0cml4PFQ+ICZtKSB7Cglmb3IgKGludCBpID0gMDsgaSA8IG0uaGVpZ2h0OyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8IG0ud2lkdGg7IGorKykgewoJCQlzIDw8IG0udltpXVtqXTsKCQl9CgkJcyA8PCBlbmRsOwoJfQoJcmV0dXJuIHM7Cn0KCmludCBtYWluKCkgewoJbWF0cml4PGludD4gYSgyLCAyKTsKCWNvdXQgPDwgYTsKCXJldHVybiAwOwp9