#include <iostream>
#include <string>
template <typename TType, int TRows, int TCols>
class TwoDArray {
private:
TType theArray[TRows][TCols];
TType defSpace;
public:
TwoDArray(TType def);
~TwoDArray();
void insert(int r, int c, TType value);
TType access(int r, int c);
void remove(int r, int c);
void print();
int getNumRows() const { return TRows; }
int getNumCols() const { return TCols; }
};
//initializes the 2D Array
template <typename TType, int TRows, int TCols>
TwoDArray<TType, TRows, TCols>::TwoDArray(TType def) {
defSpace = def;
//sets all values to the default
for(int i=0; i<TRows; i++) {
for(int j=0; j<TCols; j++) {
theArray[i][j] = defSpace;
}
}
}
//deletes the 2D Array
template<typename TType, int TRows, int TCols>
TwoDArray<TType, TRows, TCols>::~TwoDArray() {}
//inserts value v at row r and column c
template<typename TType, int TRows, int TCols>
void TwoDArray<TType, TRows, TCols>::insert(int r, int c, TType value) {
theArray[r][c] = value;
}
//get value at row r, column c
template<typename TType, int TRows, int TCols>
TType TwoDArray<TType, TRows, TCols>::access(int r, int c) {
TType result = theArray[r][c];
return result;
}
//set value at row r and column c back to default
template<typename TType, int TRows, int TCols>
void TwoDArray<TType, TRows, TCols>::remove(int r, int c) {
theArray[r][c] = defSpace;
}
//print the 2D Array
template<typename TType, int TRows, int TCols>
void TwoDArray<TType, TRows, TCols>::print() {
for(int i=0; i<TRows; i++) {
for(int j=0;j<TCols; j++) {
std::cout << theArray[i][j];
std::cout << " ";
}
std::cout << std::endl;
}
}
int main()
{
TwoDArray<int, 5, 5> i(0);
i.insert(1, 1, 1);
i.insert(1, 3, 1);
i.insert(3, 2, 8);
i.insert(2, 0, 3);
i.insert(2, 4, 3);
i.insert(3, 2, 8);
i.print();
std::cout << "\n\n";
TwoDArray<std::string, 5, 5> s("o");
s.insert(0, 2, "North");
s.insert(4, 2, "South");
s.insert(2, 4, "East");
s.insert(2, 0, "West");
s.print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFRUeXBlLCBpbnQgVFJvd3MsIGludCBUQ29scz4KY2xhc3MgVHdvREFycmF5IHsKICBwcml2YXRlOgogICAgVFR5cGUgdGhlQXJyYXlbVFJvd3NdW1RDb2xzXTsKICAgIFRUeXBlIGRlZlNwYWNlOwoKICBwdWJsaWM6CiAgICBUd29EQXJyYXkoVFR5cGUgZGVmKTsKICAgIH5Ud29EQXJyYXkoKTsKICAgIHZvaWQgaW5zZXJ0KGludCByLCBpbnQgYywgVFR5cGUgdmFsdWUpOwogICAgVFR5cGUgYWNjZXNzKGludCByLCBpbnQgYyk7CiAgICB2b2lkIHJlbW92ZShpbnQgciwgaW50IGMpOwogICAgdm9pZCBwcmludCgpOwogICAgaW50IGdldE51bVJvd3MoKSBjb25zdCB7IHJldHVybiBUUm93czsgfQogICAgaW50IGdldE51bUNvbHMoKSBjb25zdCB7IHJldHVybiBUQ29sczsgfQp9OwoKLy9pbml0aWFsaXplcyB0aGUgMkQgQXJyYXkKdGVtcGxhdGUgPHR5cGVuYW1lIFRUeXBlLCBpbnQgVFJvd3MsIGludCBUQ29scz4KVHdvREFycmF5PFRUeXBlLCBUUm93cywgVENvbHM+OjpUd29EQXJyYXkoVFR5cGUgZGVmKSB7CiAgZGVmU3BhY2UgPSBkZWY7CiAgLy9zZXRzIGFsbCB2YWx1ZXMgdG8gdGhlIGRlZmF1bHQKICBmb3IoaW50IGk9MDsgaTxUUm93czsgaSsrKSB7CiAgICBmb3IoaW50IGo9MDsgajxUQ29sczsgaisrKSB7CiAgICB0aGVBcnJheVtpXVtqXSA9IGRlZlNwYWNlOwogICAgfQogIH0KfQoKLy9kZWxldGVzIHRoZSAyRCBBcnJheQp0ZW1wbGF0ZTx0eXBlbmFtZSBUVHlwZSwgaW50IFRSb3dzLCBpbnQgVENvbHM+ClR3b0RBcnJheTxUVHlwZSwgVFJvd3MsIFRDb2xzPjo6flR3b0RBcnJheSgpIHt9CgovL2luc2VydHMgdmFsdWUgdiBhdCByb3cgciBhbmQgY29sdW1uIGMKdGVtcGxhdGU8dHlwZW5hbWUgVFR5cGUsIGludCBUUm93cywgaW50IFRDb2xzPgp2b2lkIFR3b0RBcnJheTxUVHlwZSwgVFJvd3MsIFRDb2xzPjo6aW5zZXJ0KGludCByLCBpbnQgYywgVFR5cGUgdmFsdWUpIHsKICB0aGVBcnJheVtyXVtjXSA9IHZhbHVlOwp9CgovL2dldCB2YWx1ZSBhdCByb3cgciwgY29sdW1uIGMKdGVtcGxhdGU8dHlwZW5hbWUgVFR5cGUsIGludCBUUm93cywgaW50IFRDb2xzPgpUVHlwZSBUd29EQXJyYXk8VFR5cGUsIFRSb3dzLCBUQ29scz46OmFjY2VzcyhpbnQgciwgaW50IGMpIHsKICBUVHlwZSByZXN1bHQgPSB0aGVBcnJheVtyXVtjXTsKICByZXR1cm4gcmVzdWx0Owp9CgovL3NldCB2YWx1ZSBhdCByb3cgciBhbmQgY29sdW1uIGMgYmFjayB0byBkZWZhdWx0CnRlbXBsYXRlPHR5cGVuYW1lIFRUeXBlLCBpbnQgVFJvd3MsIGludCBUQ29scz4Kdm9pZCBUd29EQXJyYXk8VFR5cGUsIFRSb3dzLCBUQ29scz46OnJlbW92ZShpbnQgciwgaW50IGMpIHsKICB0aGVBcnJheVtyXVtjXSA9IGRlZlNwYWNlOwp9CgovL3ByaW50IHRoZSAyRCBBcnJheQp0ZW1wbGF0ZTx0eXBlbmFtZSBUVHlwZSwgaW50IFRSb3dzLCBpbnQgVENvbHM+CnZvaWQgVHdvREFycmF5PFRUeXBlLCBUUm93cywgVENvbHM+OjpwcmludCgpIHsKICBmb3IoaW50IGk9MDsgaTxUUm93czsgaSsrKSB7CiAgICBmb3IoaW50IGo9MDtqPFRDb2xzOyBqKyspIHsKICAgICAgc3RkOjpjb3V0IDw8IHRoZUFycmF5W2ldW2pdOwogICAgICBzdGQ6OmNvdXQgPDwgIiAiOwogICAgfQogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICB9Cn0KCmludCBtYWluKCkKewogICAgVHdvREFycmF5PGludCwgNSwgNT4gaSgwKTsKICAgIGkuaW5zZXJ0KDEsIDEsIDEpOwogICAgaS5pbnNlcnQoMSwgMywgMSk7CiAgICBpLmluc2VydCgzLCAyLCA4KTsKICAgIGkuaW5zZXJ0KDIsIDAsIDMpOwogICAgaS5pbnNlcnQoMiwgNCwgMyk7CiAgICBpLmluc2VydCgzLCAyLCA4KTsKICAgIGkucHJpbnQoKTsKCiAgICBzdGQ6OmNvdXQgPDwgIlxuXG4iOwoKICAgIFR3b0RBcnJheTxzdGQ6OnN0cmluZywgNSwgNT4gcygibyIpOwoKICAgIHMuaW5zZXJ0KDAsIDIsICJOb3J0aCIpOwogICAgcy5pbnNlcnQoNCwgMiwgIlNvdXRoIik7CiAgICBzLmluc2VydCgyLCA0LCAiRWFzdCIpOwogICAgcy5pbnNlcnQoMiwgMCwgIldlc3QiKTsKICAgIHMucHJpbnQoKTsKCiAgICByZXR1cm4gMDsKfQo=