By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,302 Members | 1,499 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,302 IT Pros & Developers. It's quick & easy.

Multidimensional arrays

P: n/a
What's the best way of dynamically allocating a multidim array from the
following:

int **a = new int*[size];
a[0] = new int[size];
.... and so on

or:

int (*a)[10] = new int[10][10];
by the way, how do we pass arrays delcared by the second way to
functions? What really is the difference between (*a)[] and *a[]..
actually i kind of understand the difference but it doesn't hit me that
well.. I can't interpret what (*a)[] really means. Thanks!

James

Jul 19 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a

"Buster" <no***@nowhere.com> wrote in message
"James" <sn****@jamison.snort> wrote in message
What's the best way of dynamically allocating a multidim array from the
following:

int **a = new int*[size];
a[0] = new int[size];
... and so on
Use this way if the last dimension is not a compile-time constant.


I should have said 'any dimension except the first'.

You can also have 'rows' (say) with different numbers of 'columns'
using this idiom.
or:

int (*a)[10] = new int[10][10];


This way can be simpler but only works if the last dimension is a
compile-time constant.


And here, 'every dimension except the first'.
Regards,
Buster.
Jul 19 '05 #2

P: n/a

"James" <sn****@jamison.snort> wrote in message
news:3f********@clarion.carno.net.au...
What's the best way of dynamically allocating a multidim array from the
following:

int **a = new int*[size];
a[0] = new int[size];
... and so on

or:

int (*a)[10] = new int[10][10];
by the way, how do we pass arrays delcared by the second way to
functions? What really is the difference between (*a)[] and *a[]..
actually i kind of understand the difference but it doesn't hit me that
well.. I can't interpret what (*a)[] really means. Thanks!

James


I use a pointer to an array of pointers to an array of <type>, like this

int **array;

array = new int*[width];
for (int loop=0; loop<width; ++loop)
array[loop] = new int[height];

// do some things with it like
// array[3][4] = rand(); // or whatever

for (loop=0; loop<width; ++loop)
delete []array[loop];
delete [] array;

Allan
Jul 19 '05 #3

P: n/a

James <sn****@jamison.snort> wrote in message
news:3f********@clarion.carno.net.au...
What's the best way of dynamically allocating a multidim array from the
following:

int **a = new int*[size];
a[0] = new int[size];
... and so on

or:

int (*a)[10] = new int[10][10];


http://www.parashift.com/c++-faq-lit...html#faq-16.15
http://www.parashift.com/c++-faq-lit...html#faq-16.16

-Mike

Jul 19 '05 #4

P: n/a

Here's a class that creates a 2 dimensional array very easily and
efficiently:

template < class T, int ROW_T = 0, int COL_T = 0 >

class dynamic_2d_array

{

public:

dynamic_2d_array(int row, int col):m_row(row),m_col(col),
m_data((row!=0&&col!=0)?new T[row*col]:NULL){}

dynamic_2d_array():m_row(ROW_T),m_col(COL_T), m_data(new
T[ROW_T*COL_T])

{if (!COL_T || !ROW_T) {int x[ROW_T] = {{ROW_T}};int y[COL_T] =
{{x[0]}};}}

~dynamic_2d_array(){if(m_data) delete []m_data;}

T* operator[](int i) {return (m_data + (m_col*i));}

T const*const operator[](int i) const {return (m_data + (m_col*i));}

private:

const int m_row;

const int m_col;

T* m_data;

};

The above class can be delcare and used in the following maner:

dynamic_2d_array < char > My_dynamic_2d_array(3, 20);

My_dynamic_2d_array[2][11] = 99;

cout << My_dynamic_2d_array[2][11] << endl;

You can also use a vector<vector<char> > type object.

For more information on this class, see the following link:

http://axter.com/faq/topic.asp?TOPIC...CAT_ID=9&Topi-
c_Title=How+to+create+dynamic+two%2Ddimensional+ar rays&Forum_Title=-
C%2FC%2B%2B

Also check out the multidimensional class in the following link:

http://axter.com/faq/topic.asp?TOPIC...AT_ID=9&Topic-
_Title=How+to+create+dynamic+Multi%2Ddimensional+a rrays&Forum_Title=-
C%2FC%2B%2B
--
Top ten Expert at Experts-Exchange
Posted via http://dbforums.com
Jul 19 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.