#include <iostream>
#include <fstream>
#include <string>
using namespace std;
template <typename T>
class TwoDArray {
private:
T** theArray;
int numRows;
int numCols;
T defSpace;
public:
TwoDArray<T> (int r, int c, T def);
~TwoDArray<T>();
void insert(int r, int c, T value);
T access(int r, int c);
void remove(int r, int c);
void print();
int getNumRows();
int getNumCols();
};
//initializes the 2D Array
template <typename T>
TwoDArray<T>::TwoDArray(int r, int c, T def) {
numRows = r;
numCols = c;
defSpace = def;
theArray = new T*[r];
for(int i=0; i<r; i++) {
theArray[i] = new T[c];
}
//sets all values to the default
for(int i=0; i<r; i++) {
for(int j=0; j<c; j++) {
theArray[i][j] = defSpace;
}
}
}
//deletes the 2D Array
template<typename T>
TwoDArray<T>::~TwoDArray() {
for(int i=0; i<numRows; i++) {
delete[] theArray[i];
}
delete[] theArray;
}
//inserts value v at row r and column c
template<typename T>
void TwoDArray<T>::insert(int r, int c, T value) {
theArray[r][c] = value;
}
//get value at row r, column c
template<typename T>
T TwoDArray<T>::access(int r, int c) {
T result = theArray[r][c];
return result;
}
//set value at row r and column c back to default
template<typename T>
void TwoDArray<T>::remove(int r, int c) {
theArray[r][c] = defSpace;
}
//print the 2D Array
template<typename T>
void TwoDArray<T>::print() {
for(int i=0; i<numRows; i++) {
for(int j=0;j<numCols; j++) {
std::cout << theArray[i][j];
std::cout << " ";
}
std::cout << std::endl;
}
}
//gets number of rows for test
template<typename T>
int TwoDArray<T>::getNumRows() {
return numRows;
}
//gets number of columns for test
template<typename T>
int TwoDArray<T>::getNumCols() {
return numCols;
}
int main()
{
TwoDArray<std::string>* s = new TwoDArray<std::string>(5, 5, "o");
s->insert(0, 2, "North");
s->insert(4, 2, "South");
s->insert(2, 4, "East");
s->insert(2, 0, "West");
s->print();
delete s;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgVHdvREFycmF5IHsKICBwcml2YXRlOgogICAgVCoqIHRoZUFycmF5OwogICAgaW50IG51bVJvd3M7CiAgICBpbnQgbnVtQ29sczsKICAgIFQgZGVmU3BhY2U7CgogIHB1YmxpYzoKICAgIFR3b0RBcnJheTxUPiAoaW50IHIsIGludCBjLCBUIGRlZik7CiAgICB+VHdvREFycmF5PFQ+KCk7CiAgICB2b2lkIGluc2VydChpbnQgciwgaW50IGMsIFQgdmFsdWUpOwogICAgVCBhY2Nlc3MoaW50IHIsIGludCBjKTsKICAgIHZvaWQgcmVtb3ZlKGludCByLCBpbnQgYyk7CiAgICB2b2lkIHByaW50KCk7CiAgICBpbnQgZ2V0TnVtUm93cygpOwogICAgaW50IGdldE51bUNvbHMoKTsKfTsKCi8vaW5pdGlhbGl6ZXMgdGhlIDJEIEFycmF5CnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpUd29EQXJyYXk8VD46OlR3b0RBcnJheShpbnQgciwgaW50IGMsIFQgZGVmKSB7CiAgbnVtUm93cyA9IHI7CiAgbnVtQ29scyA9IGM7CiAgZGVmU3BhY2UgPSBkZWY7CiAgdGhlQXJyYXkgPSBuZXcgVCpbcl07CiAgZm9yKGludCBpPTA7IGk8cjsgaSsrKSB7CiAgICB0aGVBcnJheVtpXSA9IG5ldyBUW2NdOwogIH0KICAvL3NldHMgYWxsIHZhbHVlcyB0byB0aGUgZGVmYXVsdAogIGZvcihpbnQgaT0wOyBpPHI7IGkrKykgewogICAgZm9yKGludCBqPTA7IGo8YzsgaisrKSB7CiAgICB0aGVBcnJheVtpXVtqXSA9IGRlZlNwYWNlOwogICAgfQogIH0KfQoKLy9kZWxldGVzIHRoZSAyRCBBcnJheQp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpUd29EQXJyYXk8VD46On5Ud29EQXJyYXkoKSB7CiAgZm9yKGludCBpPTA7IGk8bnVtUm93czsgaSsrKSB7CiAgICBkZWxldGVbXSB0aGVBcnJheVtpXTsKICB9CiAgZGVsZXRlW10gdGhlQXJyYXk7Cn0KCi8vaW5zZXJ0cyB2YWx1ZSB2IGF0IHJvdyByIGFuZCBjb2x1bW4gYwp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIFR3b0RBcnJheTxUPjo6aW5zZXJ0KGludCByLCBpbnQgYywgVCB2YWx1ZSkgewogIHRoZUFycmF5W3JdW2NdID0gdmFsdWU7Cn0KCi8vZ2V0IHZhbHVlIGF0IHJvdyByLCBjb2x1bW4gYwp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpUIFR3b0RBcnJheTxUPjo6YWNjZXNzKGludCByLCBpbnQgYykgewogIFQgcmVzdWx0ID0gdGhlQXJyYXlbcl1bY107CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy9zZXQgdmFsdWUgYXQgcm93IHIgYW5kIGNvbHVtbiBjIGJhY2sgdG8gZGVmYXVsdAp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIFR3b0RBcnJheTxUPjo6cmVtb3ZlKGludCByLCBpbnQgYykgewogIHRoZUFycmF5W3JdW2NdID0gZGVmU3BhY2U7Cn0KCi8vcHJpbnQgdGhlIDJEIEFycmF5CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgVHdvREFycmF5PFQ+OjpwcmludCgpIHsKICBmb3IoaW50IGk9MDsgaTxudW1Sb3dzOyBpKyspIHsKICAgIGZvcihpbnQgaj0wO2o8bnVtQ29sczsgaisrKSB7CiAgICAgIHN0ZDo6Y291dCA8PCB0aGVBcnJheVtpXVtqXTsKICAgICAgc3RkOjpjb3V0IDw8ICIgIjsKICAgIH0KICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgfQp9CgovL2dldHMgbnVtYmVyIG9mIHJvd3MgZm9yIHRlc3QKdGVtcGxhdGU8dHlwZW5hbWUgVD4KaW50IFR3b0RBcnJheTxUPjo6Z2V0TnVtUm93cygpIHsKICByZXR1cm4gbnVtUm93czsKfQoKLy9nZXRzIG51bWJlciBvZiBjb2x1bW5zIGZvciB0ZXN0CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmludCBUd29EQXJyYXk8VD46OmdldE51bUNvbHMoKSB7CiAgcmV0dXJuIG51bUNvbHM7Cn0KaW50IG1haW4oKQp7CiAgICBUd29EQXJyYXk8c3RkOjpzdHJpbmc+KiBzID0gbmV3IFR3b0RBcnJheTxzdGQ6OnN0cmluZz4oNSwgNSwgIm8iKTsKCiAgICBzLT5pbnNlcnQoMCwgMiwgIk5vcnRoIik7CiAgICBzLT5pbnNlcnQoNCwgMiwgIlNvdXRoIik7CiAgICBzLT5pbnNlcnQoMiwgNCwgIkVhc3QiKTsKICAgIHMtPmluc2VydCgyLCAwLCAiV2VzdCIpOwogICAgcy0+cHJpbnQoKTsKCiAgICBkZWxldGUgczsKCiAgICByZXR1cm4gMDsKfQo=