You're welcome. For what is worth, I enjoyed reading your link quite a bit.

Carlos Guia
On May 23, 2012 2:18 AM, "Chan Pruksapha" <[email protected]> wrote:

> I find your work around very good idea. Thanks Carlos.
>
> On May 15, 2012, at 9:30 PM, Carlos Guia wrote:
>
> Depends on your exact needs, if all you care about is accessing elements
> as mat[i][j] you can do something like this:
>
>
> int** matrix;
> ...
> matrix = new int*[M]; // create an array of pointers to int
> for (int i = 0; i < M; ++i)
>     matrix[i] = new int[N];   // create an array of integers for each "row"
>
> // now matrix[i][j] should work as expected
> // you can free memory like this
> for (int i = 0; i < M; ++i)
>     delete[] matrix[i];   // delete each array of integers
> delete[] matrix; // delete the array of pointers
>
>
> Creating that way, is simple and intuitive, but has the disadvantage that
> the elements are not contiguous in the matrix, each row has it's elements
> contiguous, but not the complete matrix. That means, that a function that
> expects a "normal" matrix and uses the fact that something like "int
> mat[3][4]" has the 12 values contiguous may break.
>
> A work around for that is to create the contiguous array of size MxN and
> then assign the correct pointers, something like:
> int** matrix;
> ...
> int* temp = new int[M * N]; // contiguous array for the integers
> matrix = new int*[M]; // create an array of pointers to int
> for (int i = 0; i < M; ++i)
>     matrix[i] = temp + N * i; // Make each element of "matrix" point to
> the start of the corresponding row
> // NOTE: DO NOT DELETE temp, for extra safety, make it a null pointer
> temp = 0;
>
> // now matrix[i][j] should work as expected, also, all elements are
> contiguous
> // you can free memory like this
> delete[] matrix[0];   // delete the contiguous array of integers
> delete[] matrix; // delete the array of pointers
>
> You can extend this idea for any number of dimensions you like.
>
> Regards,
> Carlos Guía
>
>
> On Tue, May 15, 2012 at 8:18 AM, Registered user <[email protected]
> > wrote:
>
>> how to create 2d or 3d array dynamically , giving the size at run time :
>> for global array....
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Google Code Jam" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/google-code?hl=en.
>>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google Code Jam" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-code?hl=en.
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Google Code Jam" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-code?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Code Jam" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-code?hl=en.

Reply via email to