Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Array intialization

Reply
Thread Tools

Array intialization

 
 
Drak I
Guest
Posts: n/a
 
      06-23-2004

Hello all,
I have very basic question on intializing two dimenstional array. Why cant I
initialize a two dimensional int array like the following ?

int **intArray = new int[10][20]

What is the best way to intialize such array if I need to pass the size as
variables, like int [rows][columns], where rows and columns has the size of the
array.

Thanks in advance
Drak

--
Use our news server 'news.foorum.com' from anywhere.
More details at: http://nnrpinfo.go.foorum.com/
 
Reply With Quote
 
 
 
 
Karl Heinz Buchegger
Guest
Posts: n/a
 
      06-23-2004
Drak I wrote:
>
> Hello all,
> I have very basic question on intializing two dimenstional array. Why cant I
> initialize a two dimensional int array like the following ?
>
> int **intArray = new int[10][20]
>
> What is the best way to intialize such array if I need to pass the size as
> variables, like int [rows][columns], where rows and columns has the size of the
> array.


This is a FAQ.

>
> Thanks in advance
> Drak
>
> --
> Use our news server 'news.foorum.com' from anywhere.
> More details at: http://nnrpinfo.go.foorum.com/



--
Karl Heinz Buchegger, GASCAD GmbH
Teichstrasse 2
A-4595 Waldneukirchen
Tel ++43/7258/7545-0 Fax ++43/7258/7545-99
email: http://www.velocityreviews.com/forums/(E-Mail Removed) Web: www.gascad.com

Fuer sehr grosse Werte von 2 gilt: 2 + 2 = 5
 
Reply With Quote
 
 
 
 
Karl Heinz Buchegger
Guest
Posts: n/a
 
      06-23-2004
Drak I wrote:
>
> Hello all,
> I have very basic question on intializing two dimenstional array. Why cant I
> initialize a two dimensional int array like the following ?
>
> int **intArray = new int[10][20]
>
> What is the best way to intialize such array if I need to pass the size as
> variables, like int [rows][columns], where rows and columns has the size of the
> array.
>


This is a FAQ

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

Make sure you read the following items also.


--
Karl Heinz Buchegger
(E-Mail Removed)
 
Reply With Quote
 
Bob Hairgrove
Guest
Posts: n/a
 
      06-23-2004
On 23 Jun 2004 08:18:43 GMT, Drak I <programmerr@yahoo_NOSPAM_.com>
wrote:

>
>Hello all,
>I have very basic question on intializing two dimenstional array. Why cant I
>initialize a two dimensional int array like the following ?
>
>int **intArray = new int[10][20]
>
>What is the best way to intialize such array if I need to pass the size as
>variables, like int [rows][columns], where rows and columns has the size of the
>array.
>
>Thanks in advance
>Drak


Scott Meyers has a nice chapter on implementing a 2-dimensional array
class in "More Effective C++", item 30: "Proxy classes".

However, you can also use a vector of vectors instead of unsafe
arrays. Note that vectors -- unlike arrays -- can also be dynamically
sized, so this is what you need if your dimensions aren't known at
compile time.

// e.g.:

#include <iostream>
#include <ostream>
#include <vector>

typedef std::vector<int> IntVec;
typedef std::vector<IntVec> IntArray2D;

const int IDX_1 = 10;
const int IDX_2 = 20;

int main() {
using std::cout;
using std::endl;

IntVec dummy(IDX_2); // reserving space in the ctor
IntArray2D x(IDX_1); // avoids unnecessary reallocations

int c=0;
for (int i=0; i<IDX_1; ++i) {
for (int j=0; j<IDX_2; ++j, c++)
dummy[j] = (c);
x[i] = dummy;
}
for (int i=0; i<IDX_1; ++i) {
cout << "x[" << i << "]:";
for (int j=0; j<IDX_2; ++j)
cout << " " << x[i][j];
cout << endl;
}
return 0;
}

I'm not sure how to reserve enough space up front for IntArray2D,
though; assigning directly to x[i][j] instead of filling up the dummy
will compile, but then gives me an access violation at run-time. The
use of a temporary vector<int> (i.e. "dummy") seems necessary in order
for it to work.

Once the 2D-vector has been initialized, it should not be a problem to
assign directly using just the index values.

--
Bob Hairgrove
(E-Mail Removed)
 
Reply With Quote
 
John Harrison
Guest
Posts: n/a
 
      06-23-2004

"Drak I" <programmerr@yahoo_NOSPAM_.com> wrote in message
news:(E-Mail Removed)...
>
> Hello all,
> I have very basic question on intializing two dimenstional array. Why cant

I
> initialize a two dimensional int array like the following ?
>
> int **intArray = new int[10][20]
>


Because the types are different. intArray is type int** but new int[10][20]
is type int (*)[20]. Not the same type at all. Newbies often get this wrong
because they don't understand the C++ type system very well.


> What is the best way to intialize such array if I need to pass the size as
> variables, like int [rows][columns], where rows and columns has the size

of the
> array.


As Karl said, read the FAQ.

john


 
Reply With Quote
 
Mats Weber
Guest
Posts: n/a
 
      06-23-2004
In article <(E-Mail Removed)>,
Drak I <programmerr@yahoo_NOSPAM_.com> wrote:

>I have very basic question on intializing two dimenstional array. Why cant I
>initialize a two dimensional int array like the following ?
>
>int **intArray = new int[10][20]


using vector< vector<int> > makes it all much simpler.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Intialization and fill of an array of structures of type data kim80109 Software 0 02-09-2011 03:32 AM
array intialization for primitives Eric Java 9 11-22-2006 04:35 PM
Why Didn't The Creators Of Java Allow For Generic Array Intialization? res7cxbi@verizon.net Java 1 01-02-2006 06:20 AM
Intialization of State machine john VHDL 2 07-05-2005 12:01 PM
Driver intialization sequence =?Utf-8?B?ZnJlZA==?= Wireless Networking 2 12-17-2004 08:27 PM



Advertisments