#include <iostream>
#include <string>
class Matrix {
std::string **m;
int m_x, m_y;
public:
Matrix(int x, int y) : m_x(x), m_y(y) {
m = new std::string*[x];
for (int i = 0; i < x; ++i)
m[i] = new std::string[y];
}
~Matrix() {
for (int i = 0; i < m_x; ++i)
delete[] m[i];
delete[] m;
}
void print() const {
for(int i = 0; i < m_x; ++i) {
for (int j = 0; j < m_y; ++j) {
std::cout << '[' << m[i][j] << ']';
}
std::cout << std::endl;
}
}
class Proxy {
std::string *mm;
public:
Proxy(std::string *s) : mm(s) {}
std::string& operator[](int index) {
return mm[index];
}
};
Proxy operator[](int index) {
return Proxy(m[index]);
}
};
int main()
{
Matrix *m = new Matrix(5, 5);
m->print();
(*m)[2][2] = "It Works";
std::cout << (*m)[2][2] << std::endl;
m->print();
delete m;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPiAKCmNsYXNzIE1hdHJpeCB7CglzdGQ6OnN0cmluZyAqKm07CglpbnQgbV94LCBtX3k7CnB1YmxpYzoKCU1hdHJpeChpbnQgeCwgaW50IHkpIDogbV94KHgpLCBtX3koeSkgewoJCW0gPSBuZXcgc3RkOjpzdHJpbmcqW3hdOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgeDsgKytpKQoJCQltW2ldID0gbmV3IHN0ZDo6c3RyaW5nW3ldOwoJfQoKCX5NYXRyaXgoKSB7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBtX3g7ICsraSkKCQkJZGVsZXRlW10gbVtpXTsKCQlkZWxldGVbXSBtOwoJfQoKCXZvaWQgcHJpbnQoKSBjb25zdCB7CgkJZm9yKGludCBpID0gMDsgaSA8IG1feDsgKytpKSB7CgkJCWZvciAoaW50IGogPSAwOyBqIDwgbV95OyArK2opIHsKCQkJCXN0ZDo6Y291dCA8PCAnWycgPDwgbVtpXVtqXSA8PCAnXSc7CgkJCX0KCQkJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCQl9Cgl9CgoJY2xhc3MgUHJveHkgewoJCXN0ZDo6c3RyaW5nICptbTsKCXB1YmxpYzoKCQlQcm94eShzdGQ6OnN0cmluZyAqcykgOiBtbShzKSB7fQoKCQlzdGQ6OnN0cmluZyYgb3BlcmF0b3JbXShpbnQgaW5kZXgpIHsKCQkJcmV0dXJuIG1tW2luZGV4XTsKCQl9Cgl9OwoKCVByb3h5IG9wZXJhdG9yW10oaW50IGluZGV4KSB7CgkJcmV0dXJuIFByb3h5KG1baW5kZXhdKTsKCX0KfTsKCmludCBtYWluKCkKewoJTWF0cml4ICptID0gbmV3IE1hdHJpeCg1LCA1KTsKCW0tPnByaW50KCk7CgkoKm0pWzJdWzJdID0gIkl0IFdvcmtzIjsKCXN0ZDo6Y291dCA8PCAoKm0pWzJdWzJdIDw8IHN0ZDo6ZW5kbDsKCW0tPnByaW50KCk7CglkZWxldGUgbTsKCXJldHVybiAwOwp9