Solved

# 2D Dynamic Arrays

Posted on 2004-10-03
232 Views
Hi,

How do I make a two-dimensional dynamic array? And is it possible to make one from a class?
0
Question by:SonicX_BlueBlur
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 4
• 3
• 2
• +1

LVL 55

Expert Comment

ID: 12214035
Hi SonicX_BlueBlur,

You can design your own class to manage a bidimensional dynamic class.
Have a look to this similar question I've answered for a 3-dimensional dynamic class:
http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_21021623.html

Good luck,
Jaime.
0

LVL 17

Expert Comment

ID: 12214211
EE's Axter has this implementation, which he posted a while back, which is nice:

http://axter.com/code/dynamic_2d_array.h
0

Author Comment

ID: 12214375
rstaveley, Axter's code is illegible to me. So far, Jaime's code looks the best, but I don't know how I could make it work with a class.
0

LVL 55

Expert Comment

ID: 12214419
Here is a 2d implementation with a 'double' data member, hope you can understand. I will continue tomorrow because I am going to sleep. Good luck, Jaime.

---------------------------------

class Double2dArray
{
double *data;   // example with 'double' datatype, could be anything
int maxx, maxy;

Double3dArray (int x, int y) {
maxx = x;
maxy = y;
data = new double[maxx*maxy];
}
~Double3dArray () {
delete [] data;
}
inline double GetAt(int x, int y) {
return data[x*maxy*y];
}
inline SetAt(int x, int y, int z) {
data[x*maxy*y] = val;
}
};

How to use:

Double2dArray arr(200,200);
arr.SetAt(100,30);    // Set element 100,30
double value = arr.GetAt(100,30);  // Get value of element 100,30

0

Author Comment

ID: 12214494
Yes, I know. I read that same code on that other thread, but how would I call member functions using that 2D array code to make a class array?
0

LVL 30

Accepted Solution

Axter earned 145 total points
ID: 12214683
http://axter.com/code/dynamic_2d_array.h

If you use my code, you can easily create a 2 Dimensional array using the following method:

dynamic_2d_array<int> MyArrOfInt(33, 44);

Where 33 is one dimension, and 44 is the second.

The above example created and interger array.

Following is a char array:

dynamic_2d_array<char> myarray(row, col);
0

LVL 30

Expert Comment

ID: 12214695
To access the data in the array, you just use the same syntax as if you were using a C-Style array.

MyArrOfInt[22][11] = 1234;

cout << MyArrOfInt[22][11] << endl;

The dynamic_2d_array class is very generic, simplistic, and efficient.

Since it uses the same interface as a C-Style array, it makes it easier to use and maintain.
0

LVL 30

Expert Comment

ID: 12214711
>>but I don't know how I could make it work with a class.

To use Jaime's code, you would have to change his original, since it's not a template class.

If you use the dynamic_2d_array, you don't have to change the class.
You just declare it with your class name in the template ID.

dynamic_2d_array<MyClass> my_var(x, y);
0

Author Comment

ID: 12216257
...Geez, it's that easy? And I thought this was all way above my head :P
Thanks for clearing that up, Axter. 145 points to you.
0

LVL 17

Expert Comment

ID: 12218882
I'm glad you accepted that from Axter rather than me. It would have been embarrassing 8-)
0

LVL 30

Expert Comment

ID: 12219336
>>I'm glad you accepted that from Axter rather than me. It would have been embarrassing 8-)

IMHO, I think the points should have been split.

I steal jkr's answers all the time. :-)
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

### Suggested Solutions

When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generatâ€¦
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a Gâ€¦
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Botâ€¦
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.
###### Suggested Courses
Course of the Month7 days, 9 hours left to enroll